虽然LookupDispatchAction
类可以很好地处理拥有多个提交按钮的Form
,但是必须要和属性文件相关联,而且还得在getKeyMethodMap
方法中进行key
和Action
方法的映射,使用起来十分不方便。从Struts1.2.9
开始,加入了另一个用于处理多个提交动作的EventDispatchAction
类。这个类也是DispatchAction
的子类,它在使用上要比LookupDispatchAction
类容易的多。EventDispatchAction
类的基本原理是通过<action>
元素的parameter
属性指定多个动作,中间用逗号(,
)分隔。每个动作实际上就是<html:submit>
标签的property
属性值。这样EventDispatchAction
类就可以根据每个<html:submit>
标签的属性值来确定用户按的是哪个提交按钮了。
我们可以按如下三步来使用EventDispatchAction
类。
【第
1
步】
实现EventDispatchAction
的子类
在<samples
工程目录>\src\action
目录中建立一个MyEventDispatchAction.java
文件,代码如下:
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 ActionForward print(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
{
try
{
response.setCharacterEncoding( " GBK " );
PrintWriter out = response.getWriter();
out.println( " 打印成功! " );
}
catch (Exception e)
{
}
return null ;
}
// 处理save动作
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
{
try
{
response.setCharacterEncoding( " GBK " );
PrintWriter out = response.getWriter();
out.println( " 保存成功! " );
}
catch (Exception e)
{
}
return null ;
}
}
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 ActionForward print(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
{
try
{
response.setCharacterEncoding( " GBK " );
PrintWriter out = response.getWriter();
out.println( " 打印成功! " );
}
catch (Exception e)
{
}
return null ;
}
// 处理save动作
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
{
try
{
response.setCharacterEncoding( " GBK " );
PrintWriter out = response.getWriter();
out.println( " 保存成功! " );
}
catch (Exception e)
{
}
return null ;
}
}
在MyEventDispatchAction
类中有两个方法:print
和save
,分别用来处理property
属性值为“print
”和“save
”的<html:submit>
标签提交的请求动作。
【第
2
步】
配置EventDispatchAction
类
打开struts-config.xml文件,在 <action-mappings>元素中加入如下的内容:
<
action
name
= "firstValidatorForm"
path
="/event"
type ="action.MyEventDispatchAction" validate ="false" parameter ="print,save" />
type ="action.MyEventDispatchAction" validate ="false" parameter ="print,save" />
【第
3
步】
实现有多个提交按钮的JSP
页面
在Web
根目录中建立一个moreSubmit.jsp
文件,代码如下:
<
%@ 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" /> < p >
< html:submit property ="print" value ="打印" />
< html:submit property ="save" value ="保存" />
</ html:form >
</ body >
</ html >
在编写moreSubmit.jsp文件时要注意,“打印”和“保存”按钮的property属性必须和<action>动作中的parameter参数值一致。也就是“print”和“save”。
< %@ 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" /> < p >
< html:submit property ="print" value ="打印" />
< html:submit property ="save" value ="保存" />
</ html:form >
</ body >
</ html >
启动Tomcat后,在IE中输入如下的URL来测试程序:
http://localhost:8080/samples/moreSubmit.jsp
为了区别提交请求参数和其他参数,在<html:submit>标签的property属性值还可以有一个后缀“.x”(<action>元素的parameter属性值仍然是“print, save”。如“打印”按钮的代码可以写成如下形式:
<
html:submit
property
="print.x"
value
="打印"
/>
本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/214847,如需转载请自行联系原作者