Struts1.x系列教程(20):使用EventDispatchAction类处理一个form多个submit

本文为原创,如需转载,请注明作者和出处,谢谢!

上一篇: Struts1.x系列教程(19):LookupDispatchAction类处理一个form多个submit

虽然LookupDispatchAction类可以很好地处理拥有多个提交按钮的Form,但是必须要和属性文件相关联,而且还得在getKeyMethodMap方法中进行keyAction方法的映射,使用起来十分不方便。从Struts1.2.9开始,加入了另一个用于处理多个提交动作的EventDispatchAction类。这个类也是DispatchAction的子类,它在使用上要比LookupDispatchAction类容易的多。EventDispatchAction类的基本原理是通过<action>元素的parameter属性指定多个动作,中间用逗号(,)分隔。每个动作实际上就是<html:submit>标签的property属性值。这样EventDispatchAction类就可以根据每个<html:submit>标签的属性值来确定用户按的是哪个提交按钮了。

我们可以按如下三步来使用EventDispatchAction类。

【第1步】实现EventDispatchAction的子类

<samples工程目录>\src\action目录中建立一个MyEventDispatchAction.java文件,代码如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> package action;

import java.io.PrintWriter;
import javax.servlet.http. * ;
import org.apache.struts.action. * ;
import org.apache.struts.actions. * ;

public class MyEventDispatchAction extends EventDispatchAction
{
// 处理print动作
public ActionForwardprint(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse)
{
try
{
response.setCharacterEncoding(
" GBK " );
PrintWriterout
= response.getWriter();
out.println(
" 打印成功! " );
}
catch (Exceptione)
{
}
return null ;
}
// 处理save动作
public ActionForwardsave(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse)
{
try
{
response.setCharacterEncoding(
" GBK " );
PrintWriterout
= response.getWriter();
out.println(
" 保存成功! " );
}
catch (Exceptione)
{
}
return null ;
}
}

MyEventDispatchAction类中有两个方法:printsave,分别用来处理property属性值为“print”和“save”的<html:submit>标签提交的请求动作。

【第2步】配置EventDispatchAction

打开struts-config.xml文件,在 <action-mappings>元素中加入如下的内容:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> < action name ="firstValidatorForm" path ="/event"
type
="action.MyEventDispatchAction" validate ="false" parameter ="print,save" />

【第3步】实现有多个提交按钮的JSP页面

Web根目录中建立一个moreSubmit.jsp文件,代码如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> < %@page pageEncoding ="GBK" % >
< %@taglib uri ="http://struts.apache.org/tags-html" prefix ="html" % >
< html >
< head >
< title > 多提交演示 </ title >
</ head >
< body >
< html:form action ="event" >
name:
< html:text property ="name" /> &nbsp;&nbsp; < p >
< html:submit property ="print" value ="打印" />
< html:submit property ="save" value ="保存" />
</ html:form >
</ body >
</ html >
在编写moreSubmit.jsp文件时要注意,“打印”和“保存”按钮的property属性必须和<action>动作中的parameter参数值一致。也就是“print”和“save”。
启动Tomcat后,在IE中输入如下的URL来测试程序:

http://localhost:8080/samples/moreSubmit.jsp

为了区别提交请求参数和其他参数,在<html:submit>标签的property属性值还可以有一个后缀“.x”(<action>元素的parameter属性值仍然是“print, save”。如“打印”按钮的代码可以写成如下形式:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> < html:submit property ="print.x" value ="打印" />

下一篇: Struts1.x系列教程(21):使用MappingDispatchAction类调用不同的Action方法

国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

你可能感兴趣的:(apache,html,jsp,android,struts)