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>标签提交的请求动作。

时间: 2016-01-10

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

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

有时在HTML form中需要提供多个提交按钮,这时LookupDispatchAction类就派上用场了.LookupDispatchAction是DispatchAction的子类,用于处理客户端代码中有一个Form含有多个提交按钮的情况.为了使用LookupDispatchAction,首先来编写客户端代码,代码如下: <html:form action="myaction"> -- <html:submit property="action"

Struts1.x系列教程(16):使用LocaleAction类实现国际化的Web程序

我们曾经在<Struts1.x系列教程(13):国际化>一文中讲过如何通过编程的方式实现多语言的Web页面.在本文中,我们会介绍另外一种实现多语言Web页面的方法.这种方式与<Struts1.x系列教程(13):国际化>一文中所介绍的方法的区别就是无需编写一行代码就可以完成多语言的设置. Struts提供了一个LocaleAction类来做这个工作.LocaleAction类是一个final动作类,因此,LocaleAction类不能被继承.我们可按着如下两步来使用LocaleAc

Struts1.x系列教程(17)

Struts1.x系列教程(17):使用IncludeAction和ForwardAction类包含和转入Web资源 一.使用IncludeAction类包含Web资源 虽然在JSP页面中可以使用<jsp:include>标签包含另一个Web资源,但Struts框架提倡在包含Web资源时应先经过Struts控制器处理后,再由Struts控制器负责包含Web资源.org.apache.struts.actions.IncludeAction类提供了包含其他Web资源的功能.使用IncludeAc

Struts1.x系列教程(11):Validator验证框架高级应用

在<Struts1.x系列教程(10):Validator验证框架入门>一文中给出的例子中的name.age和email都是简单的属性,如果是嵌套的属性(也就是一个属性的数据类型是另外一个带有属性的类),可以使用圆点(.)符号来访问.如我们可以通过设置<field>元素的property属性值为"employee.salary"来验证employee属性中的salary属性. 如果要验证的索引属性,我们可以使用<field>元素的indexedLis

Struts1.x系列教程(9):上传任意多个文件

从<Struts1.x系列教程(8):上传单个文件>中给出的例子可以看出,在Struts1.x中上传单个文件是非常简单的,但在实际应用中,上传文件的个数一般是不确定的,如在网络硬盘中,用户可以根据自己的需要上传任意多个文件(当然,网络硬盘一次上传文件的数目一般也是有上限的,如50个,但用户可以只上传了3个文件,因此,在这种情况下,上传文件的个数也是不确定的).如果读者用过"网易网盘"或其他类似的服务程序,它们的上传文件功能基本上都是根据用户选择的文件多少来添加要上传的文件(

Struts1.x系列教程(18):使用DispatchAction类调用多个Action方法

在使用Struts动作时,每一个Action都需要编写一个类,并且要在struts-config.xml进行配置.这对于一个拥有很多Action的Web程序来说,工作量是非常大的.为此,Struts提供了DispatchAction类,这个类允许将一个Action作为一个方法来调用.在Web浏览器中通过请求参数来指定要调用的动作. 虽然DispatchAction类是一个抽象类,但其中却没有一个抽象方法.因此,DisplatchAction的子类不用实现任何DisplatchAction类中的方

Struts1.x系列教程(15):使用DownloadAction类统计文件下载次数

除了标准的org.apache.struts.action.Action类外,在Struts中还提供了另外7个Action类来完成特殊的工作.本文及后面的文章中将介绍这些Action类的用法. 一.DownloadAction类简介 可能有时需要在Web程序中加入下载功能.如果要下载的是静态文件,可以直接交给Web服务器处理,但如果要对下载的文件做额外的功能,如统计文件的下载次数.就需要在下载文件之前先要调用相应的程序进行处理. 虽然我们可以直接在Action子类中来处理下载文件,但是如果这样的

Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序

本系列教程将详细介绍Struts 1.x的基本原理和使用方法,读者可以参阅<Struts 2系列教程>来比较Struts 1.x和Struts 2.x的相同点和不同点. 一.本文给出的程序要实现什么功能 mystruts是一个录入和查询产品信息的程序.为了方便起见,本例中的产品信息表只包括了产品ID.产品名称和产品价格三个字段.mystruts的主要功能如下: 1.接受用户输入的产品ID.产品名称和产品价格. 2.验证这些字段的合法性.如果某些字段的输入不合法(如未输入产品ID),程序会for

Struts1.x系列教程(2):简单的数据验证

在进行完简单验证后,如果form中的数据不合法,程序就会forward到指定的JSP页(一般是包含form的页面),并显示相应的错误信息.如果form中的数据完全正确,程序就会继续执行. 一.在validate方法中进行简单验证 在上一篇文章中我们知道,Struts1.x通过ActionForm的子类来封装了客户端提交的form中的数据.而服务端程序只需要通过ActionForm的子类的对象实例就可以访问form中的数据,而如果不使用ActionForm类,就必须通过request对象来获得fo