关于DispatchAction,他是一个动态的Action,说的直白点就是可以把很多个Action的东西集成到一个Action当中,优点就是可以不用写很多个Action那么麻烦与混乱,直接在一个当中实现,很多个Action的作用。
用法就是extends DispatchAction,原来我们继承Action的时候呢,里面的ActionForward 有一个execute方法,现在我们把这个execute改成任意的名字,但是这个名字是很有用的,他关系到的就是你上传的表单数据调用的是哪个Action,他里面的藏书一定要与execute的参数相同。DispatchAction其中有execute这个方法,我们这里还是同样可以对其重写进行使用,但是要注意的是,一定要return super.execute(mapping,form,request,response);如果不是return这里,那么我们的DispatchAction的功能将会失效。
调用他的时候主要就是在配置文件当中,原来我们在Struts-config.xml中action中我们的配置的参数主要就是 path、attribute、input、name、scope、type,现在用到了DispatchAction的时候我们需要多配置一个parameter=""这就相当于一个标示,我们通过他在根据在通过Action中你自己命名的方法名,进行不同的Action调用。
还要注意的就是,原来我们在jsp页面的时候action后面跟的就是一个地址,在根绝xml中进行查找,现在我们的action后面要写的就是例如原来写的是action="servlet"现在我们要写成action="servlet?method=Login"此处这个method则是你在xml中<action parameter="method"/>设置的,而Login则是你在Action中起的那个代替execute的方法名字。
例:
struts-config.xml中的配置方法
<action path="/login"
name="LoginForm"
attribute="LoginForm"
type="com.strutstl.action.LoginAction"
scope="request"
input="/login.jsp"
parameter="method">
<forward name="success" path="/login.jsp"></forward>
</action>
此处配置完毕,我们在看看jsp页面中的写法,用到这个DispatchAction的时候呢,jsp页面里我只能用标签实现,用html语言还没有实现,所以我贴的也是用标签实现的,如果有用html实现的也可以告诉我交流一下。
<html:form action="login?method=login"> <!--主要看的是这里-->
<h3>姓名:<html:text property="name"/></h3>
<html:submit value="确定"/><br>
<a href="reg.do">申请注册</a>
<a href="ind.do">删除账户</a>
</html:form>
这两处配置完毕我们要看看Action中是怎么写的,原来我们的Action继承的都是Action这次我们只需要继承DispatchAction就可以了。public class LoginAction extends DispatchAction {
public ActionForward login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginActionForm laf = (LoginActionForm) form;
String name = laf.getName();
Bean b = new Bean();
b.setName(name);
request.setAttribute("bean", b);
return mapping.findForward("success");
}
这里我只是给大家弄上来的是一部分,大家根据自己的思想去补全!~
到此结束,粗略见解,希望大家提出宝贵意见。