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

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

<html:form action="myaction">
    ……
    <html:submit property="action">
        <bean:message key="submit.print" />
    </html:submit>
    <html:submit property="action">
        <bean:message key="submit.save" />
    </html:submit>
</html:form>

其中submit.print和submit.save是属性文件中的key。action实际上是提交按钮的name属性值。在提交时,会将property和<bean:message key="..." />作为请求参数和参数值传给Struts动作。如save按钮被单击时,请求URL为http://localhost:8080/.../myaction.do?action=save。其中save为submit.save在属性文件中对应的属性值,也就是说submit.save = save。

接下来我们编写一个LookupDispatchAction的子类,代码如下:

package action;
import org.apache.struts.actions.LookupDispatchAction;
……
   public class MyLookupDispatchAction extends LookupDispatchAction
   {
       //  为了方便描述,在这里未使用属性文件,只是直接将key和value的映射添加到Map对象中
       //  读者可以在getKeyMethodMap方法中从属性文件中读取相应的key-value对
       //  来添加到Map对象中
       protected Map getKeyMethodMap()
       {
           Map m = new HashMap();
           m.put("submit.print", "print");
           m.put("submit.save", "save");
           return m;
       }
       public ActionForward print (ActionMapping mapping, ActionForm form,
               HttpServletRequest request, HttpServletResponse response)
       {
           // 处理print代码
       }
       public ActionForward save(ActionMapping mapping, ActionForm form,
               HttpServletRequest request, HttpServletResponse response)
       {
           // 处理save代码
       }
   }

在编写LookupDispatchAction的子类时要注意必须实现getKeyMethodMap方法,在这个方法中需要进行key和Action方法的映射。下面的代码用来配置MyLookupDispatchAction。

<action path="/moresubmit" type="action.MyLookupDispatchAction" parameter="action" />

其中parameter属性指定了请求URL中由提交按钮生成的请求参数名。

时间: 2024-12-04 06:22:41

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

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

虽然LookupDispatchAction类可以很好地处理拥有多个提交按钮的Form,但是必须要和属性文件相关联,而且还得在getKeyMethodMap方法中进行key和Action方法的映射,使用起来十分不方便.从Struts1.2.9开始,加入了另一个用于处理多个提交动作的EventDispatchAction类.这个类也是DispatchAction的子类,它在使用上要比LookupDispatchAction类容易的多.EventDispatchAction类的基本原理是通过<act

Struts1.x系列教程(14):动态Form

一.动态Form简介 虽然ActionForm功能强大,但有些时候使用起来有些麻烦.如每建立一个用户录入界面(JSP页面),就得建立一个ActionForm子类来和这个页面对应.当然,我们可以采用嵌套属性从一定程度上弥补这个问题.但是在建立新的用户录入界面时,仍不可避免地要建立新的ActionForm子类. 在Struts1.2.6及以后的Struts版本中提供了一种动态Form的技术.使得不用再建立新的ActionForm就可以封装用户提交的数据.实际上,这种技术将定义ActionForm子类

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

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

Struts1.x系列教程(17):使用IncludeAction和ForwardAction类包含和转入Web资源

本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇:Struts1.x系列教程(16):使用LocaleAction类实现国际化的Web程序 一.使用IncludeAction类包含Web资源     虽然在JSP页面中可以使用<jsp:include>标签包含另一个Web资源,但Struts框架提倡在包含Web资源时应先经过Struts控制器处理后,再由Struts控制器负责包含Web资源.org.apache.struts.actions.IncludeAction类提供了包含其他We

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子类中来处理下载文件,但是如果这样的