`

[转]DispatchAction

阅读更多
DispatchAction是一个抽象类,继承于Action。它帮助我们使用一个Action类,来集中处理多个操作,从而节省了类的数目。



例如:下面的例子。按照struts的流程来分析,JSP-->ActionServlet-->struts-config.xml-->Action-->ActionForward-->browser



1.JSP页面提交表单到ActionServlet,ActionServlet截取URL,然后根据struts-config.xml配置文件去找相应的Action,执行相应的操作(这里Action只有一个即UserAction,如何区别是何种操作?---根据方法名来找到不同的操作。)颜色相同一定要匹配。

action="usermaintain.do?command=add";

action="usermaintain.do?command=del";

action="usermaintain.do?command=modify";



2.UserAction继承于DispatchAction,包含了三个操作方法,分别是add(),del(),modify(),方法名称与form表单传递的属性一一对应

public class UserAction extends DispatchAction {

         public ActionForward add(mapping, form, request, response) throws Exception {

                   return mapping.findForward("add_success");

         }

         public ActionForward del(mapping, form, request, response) throws Exception {

                   return mapping.findForward("del_success");

         }

         public ActionForward modify(mapping, form, request, response) throws Exception {

                   return mapping.findForward("modify_success");

         }

}



3.struts-config.xml中,parameter的属性值是可以任意起的,即command可以是其他。只要保证form表单中传参数时与之统一就行。

<action-mappings>

         <action path="/user/usermaintain"

                   type="com.bjsxt.drp.bussiness.usermgr.actions.UserAction"

                   name="userForm"

                   scope="request"

                   parameter="command"

                   >

                   <forward name="add_success" path="/user/usermaintain.do?command=list" redirect="true"/>

                   <forward name="del_success" path="/user/usermaintain.do?command=list" redirect="true"/>

                   <forward name="modify_success" path="/user/usermaintain.do?command=list" redirect="true"/>

                   <forward name="list_success" path="/user/userlist.jsp"/>

                   <forward name="find_success" path="/user/usermodify.jsp"/>

         </action>

</action-mappings>

这里的forward有的是直接提交到一个JSP页面,有的是提交到另一个动作。forward中name值和UserAction中findForward匹配。



注:1.DispatchAction中各个操作方法的参数如add(),del(),modify()和execute()方法的参数相同。

2.DispatchAction通过方法名来区别各个不同的操作。

3.在调用DispatchAction的时候command参数是不能为空的,如果空,DispatchAction会调用unspecified方法并抛出异常。详见下一遍DispatchAction的流程

4.UserAction 可以复写execute方法,但复写完成之后必须显示调用它的上层实现DispatchAction.execute()





本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/switzerland/archive/2008/10/10/3051950.aspx
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics