虽然LookupDispatchAction类可以很好地处理拥有多个提交按钮的Form但是必须要和属性文件相关联而且还得在getKeyMethodMap方法中进行key和Action方法的映射使用起来十分不方便从Struts开始加入了另一个用于处理多个提交动作的EventDispatchAction类这个类也是DispatchAction的子类它在使用上要比LookupDispatchAction类容易的多EventDispatchAction类的基本原理是通过<action>元素的parameter属性指定多个动作中间用逗号()分隔每个动作实际上就是<htmlsubmit>标签的property属性值这样EventDispatchAction类就可以根据每个<htmlsubmit>标签的属性值来确定用户按的是哪个提交按钮了
我们可以按如下三步来使用EventDispatchAction类
【第步】实现EventDispatchAction的子类
在<samples工程目录>\src\action目录中建立一个MyEventDispatchActionjava文件代码如下
packageaction;
importjavaioPrintWriter;
importjavaxservlethttp*;
importorgapachestrutsaction*;
importorgapachestrutsactions*;
publicclassMyEventDispatchActionextendsEventDispatchAction
{
//处理print动作
publicActionForwardprint(ActionMappingmappingActionFormform
HttpServletRequestrequestHttpServletResponseresponse)
{
try
{
responsesetCharacterEncoding(GBK);
PrintWriterout=responsegetWriter();
outprintln(打印成功!);
}
catch(Exceptione)
{
}
returnnull;
}
//处理save动作
publicActionForwardsave(ActionMappingmappingActionFormform
HttpServletRequestrequestHttpServletResponseresponse)
{
try
{
responsesetCharacterEncoding(GBK);
PrintWriterout=responsegetWriter();
outprintln(保存成功!);
}
catch(Exceptione)
{
}
returnnull;
}
}
在MyEventDispatchAction类中有两个方法print和save分别用来处理property属性值为print和save的<htmlsubmit>标签提交的请求动作
【第步】配置EventDispatchAction类
打开strutsconfigxml文件在 <actionmappings>元素中加入如下的内容
<actionname=firstValidatorFormpath=/event
type=actionMyEventDispatchActionvalidate=falseparameter=printsave/>
【第步】实现有多个提交按钮的JSP页面
在Web根目录中建立一个moreSubmitjsp文件代码如下
<%@pagepageEncoding=GBK%>
<%@tagliburi=htmlprefix=html%>
<html>
<head>
<title>多提交演示</title>
</head>
<body>
<html:formaction=event>
name<html:textproperty=name/> <p>
<html:submitproperty=printvalue=打印/>
<html:submitproperty=savevalue=保存/>
</html:form>
</body>
</html>
在编写moreSubmitjsp文件时要注意打印和保存按钮的property属性必须和<action>动作中的parameter参数值一致也就是print和save
启动Tomcat后在IE中输入如下的URL来测试程序
为了区别提交请求参数和其他参数在<htmlsubmit>标签的property属性值还可以有一个后缀x(<action>元素的parameter属性值仍然是print save如打印按钮的代码可以写成如下形式
<html:submitproperty=printxvalue=打印/>