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

简介:
虽然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 ;
      } 
  }  
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" />
【第 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"   /> &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”。如“打印”按钮的代码可以写成如下形式:

< html:submit  property ="print.x"  value ="打印" />
 



 本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/214847,如需转载请自行联系原作者

相关文章
|
Java 数据库 Spring
SpringMVC-form标签
SpringMVC-form标签
78 0
SpringMVC - Form标签(六)
SpringMVC - Form标签(六)
133 0
SpringMVC - Form标签(六)
SpringMVC - Form标签(四)
SpringMVC - Form标签(四)
183 0
SpringMVC - Form标签(四)
|
Java Spring
SpringMVC - Form标签(三)
SpringMVC - Form标签(三)
105 0
SpringMVC - Form标签(三)
SpringMVC - Form标签(五)
SpringMVC - Form标签(五)
144 0
SpringMVC - Form标签(五)
|
Java Spring
SpringMVC - Form标签(一)
SpringMVC - Form标签(一)
305 0
SpringMVC - Form标签(二)
SpringMVC - Form标签(二)
123 0