程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Struts1.x系列教程(20):使用EventDispatchAction類處理一個form多個submit

Struts1.x系列教程(20):使用EventDispatchAction類處理一個form多個submit

編輯:關於JAVA

雖然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="打印"/>

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved