|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Наследники Actionв виде ответа на одно действие пользователя, что увеличивало количество классов приложения и усложняло его поддержку.Класс DispatchAction позволяет объединить несколько методов работы с одним модулем в одном классе и вызывать их в зависимости от значения параметра запроса. Например, для работы с модулем User класс UserDispatchAction мог бы содержать методы save(), delete(), list() и другие.Параметр, значение которого будет использовано для вызова метода, описывается в struts-config.xml в описании action. <action path="/ModuleAction" type="com.struts.ModuleDispatchAction" parameter="method" ...</action>В коде JSP теперь требуется расставить линки с параметром method, значение которого должно соответствовать методу, вызываемому в подклассе. Например:<a href="ModuleAction.do? method=edit &id=1>Edit</a> <a href="ModuleAction.do? method=view &id=1>View</a>Далее осталось реализовать методы в ModuleDispatchAction. Если параметр не содержит значения, то вызовется метод unspecified() данного класса. Так же можно реализовать метод cancelled(), который будет вызываться при использовании кнопки <html:cancel/>.import org.apache.struts.actions.DispatchAction;
public class ModuleDispatchAction extends DispatchAction{ public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // код для обработки } public ActionForward view(...) throws IOException, ServletException { // код для обработки } ... public ActionForward unspecified(...) throws IOException, ServletException {
mapping.findForward("methodNotFound"); } public ActionForward cancelled(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
mapping.findForward("cancelPage"); } } Класс LookupDispatchAction является наследником от DispatchAction. В отличие от предыдущего класса, который в основном используется через использование линков на View, данный класс применяется если форма должна иметь несколько различных кнопок для выполнения запроса на сервер.Пусть на странице JSP с помощью тега <html:submit/> расположены кнопки, свойство property которых указывает на название параметра, отправляемого на сервер со значением тега <bean:message/> после нажатия на эту кнопку. <html:form action="ModuleAction.do"> ... <html:submit property=" method "> <bean:message key=" submit.button.print " /> </html:submit> <html:submit property=" method "> <bean:message key=" button.save " /> </html:submit> </html:form>Затем так же, как и для класса DispatchAction, должен быть задан параметр, который содержит вызываемый метод. <action path="/ModuleAction" type="com. struts.ModuleLookupDispatchAction" parameter="method" ...</action>Реализуем методы аналогично DispatchAction классу, но также реализуем метод getKeyMethodMap(), который организует mappingмежду ключом названия кнопки и методом. import org.apache.struts.actions.LookupDispatchAction; ... public class ModuleLookupDispatchAction extends LookupDispatchAction { private static Map m = new HashMap(); static { m.put("myapp.submit.button.print","print"); m.put("myapp.submit.button.save","save"); } protected Map getKeyMethodMap(){ return m; } public ActionForward print(...) throws IOException, ServletException { ... } public ActionForward save(...) throws IOException, ServletException { ... }...}Класс MappingDispatchAction также является наследником DispatchAction класса, где вызываемый метод определяется не по значению параметра, а по запрашиваемому URL-адресу маппинг которого хранится в struts-config.xml. Для одного класса MappingDispatchAction может существовать несколько возможных элементов <action>:<action path="/userUpdate" type="com.struts.UserMappingDispatchAction" parameter="update" ... <action path="/userAdd" type="com.struts.UserMappingDispatchAction" parameter="create" ...Значение атрибута parameter содержит название метода, который должен отреагировать на данный запрос.И, как в предыдущих случаях, осталось реализовать необходимые методы.import org.apache.struts.actions.MappingDispatchAction; ... public class UserMappingDispatchAction extends MappingDispatchAction{
public ActionForward update (ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ... } public ActionForward create (...) throws IOException, ServletException { ... } ... public ActionForward unspecified(...) throws IOException, ServletException { mapping.findForward("methodNotFound"); } } Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.) |