随笔 - 312, 文章 - 14, 评论 - 1393, 引用 - 0
数据加载中……

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文件,代码如下:

  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类中有两个方法:printsave,分别用来处理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="打印"/>

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



Android开发完全讲义(第2版)(本书版权已输出到台湾)

http://product.dangdang.com/product.aspx?product_id=22741502



Android高薪之路:Android程序员面试宝典 http://book.360buy.com/10970314.html


新浪微博:http://t.sina.com.cn/androidguy   昵称:李宁_Lining

posted on 2009-02-24 15:07 银河使者 阅读(2354) 评论(1)  编辑  收藏 所属分类: javaweb 原创struts1.x

评论

# re: Struts1.x系列教程(20):使用EventDispatchAction类处理一个form多个submit  回复  更多评论   

good...
2009-02-24 21:28 | ci

只有注册用户登录后才能发表评论。


网站导航: