一個form,多個submit提交
在很多 Web 應用中,為了完成不同的工作,一個 HTML form 標籤中可能有兩個或多個 submit 按鈕,如下面的程式碼所示:
< html action =" " method ="post" >< input type ="submit" value ="儲存" /> < input type ="submit" value ="列印" /> </ html >
由於在 <form>中的多個提交按鈕都向一個 action提交,使用 Struts2 Action的 execute方法就無法判斷使用者點選了哪一個提交按鈕。如果大家使用過
當然,我們也可以模擬 EventDispatchAction的方法通過 request獲得和處理引數資訊。但這樣比較麻煩。在 Struts2中提供了另外一種方法,使得無需要配置可以在同一個 action類中執行不同的方法(預設執行的是 execute方法)。使用這種方式也需要通過請求參來來指定要執行的動作。請求引數名的格式為
action!method.action
注:由於 Struts2只需要引數名,因此,引數值是什麼都可以。
下面我就給出一個例項程式來演示如何處理有多個 submit的 form:
【第 1步】實現主頁面
在 more_submit.jsp中有兩個 submit:儲存和列印。其中分別通過 method屬性指定了要呼叫的方法: save和 print。因此,在 Action類中必須要有 save和 print方法。
【第 2步】實現 Action類( MoreSubmitAction)
package action;import javax.servlet.http. * ;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor. * ;
public class MoreSubmitAction extends ActionSupport implements ServletRequestAware
{
private String msg;
private javax.servlet.http.HttpServletRequest request;
// 獲得HttpServletRequest物件 public void setServletRequest(HttpServletRequest request)
{
this .request = request;
}
// 處理save submit按鈕的動作 public String save() throws Exception
{
request.setAttribute( " result " , " 成功儲存[ " + msg + " ] " );
return " save " ;
}
// 處理print submit按鈕的動作 public String print() throws Exception
{
request.setAttribute( " result " , " 成功列印[ " + msg + " ] " );
return " print " ;
}
public String getMsg()
{
return msg;
}
public void setMsg(String msg)
{
this .msg = msg;
}
}
上面的程式碼需要注意如下兩點:
save和 print方法必須存在,否則會丟擲 java.lang.NoSuchMethodException異常。
Struts2 Action動作中的方法和 Struts1.x Action的 execute不同,只使用 Struts2 Action動作的 execute方法無法訪問 request物件,因此, Struts2 Action類需要實現一個 Struts2自帶的攔截器來獲得 request物件,攔截器如下:
org.apache.struts2.interceptor. ServletRequestAware
【第 3步】配置 Struts2 Action
struts.xml 的程式碼如下:
<? xml version="1.0" encoding="UTF-8" ?> <! DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd" > < struts > < package name ="demo" extends ="struts-default" > < action name ="submit" class ="action.MoreSubmitAction" > < result name ="save" >
/result.jsp
</ result > < result name ="print" >
/result.jsp
</ result > </ action > </ package > </ struts >
【第 4步】編寫結果頁( result.jsp)
<% @ page pageEncoding = " GBK " %> < html > < head > < title > 提交結果 </ title > </ head > < body > < h1 > ${result} </ h1 > </ body > </ html >在 result.jsp中將在 save和 print方法中寫到 request屬性中的執行結果資訊取出來,並輸出到客戶端。
啟動 Tomcat後,在 IE中執行如下的 URL來測試程式:
http://localhost:8080/moresubmit/more_submit.jsp
大家也可以直接使用如下的 URL來呼叫 save和 print方法: 呼叫 save方法: http://localhost:8080/moresubmit/submit!save.action
呼叫 print方法: http://localhost:8080/moresubmit/submit!print.action
相關推薦
一個form,多個submit提交
在很多 Web 應用中,為了完成不同的工作,一個 HTML form 標籤中可能有兩個或多個 submit 按鈕,如下面的程式碼所示: < html action =" " method ="post" > < input type ="sub
用jquery.form實現多個submit按鈕提交
相關前端程式碼如下: <form id="from1" action="/AjaxTestAutoAction/submit.cspx" method="post"> <p><span>Input:</span> <i
Git 問題,一個 master,多個新功能分支,怎樣有序地合併和提交
git支援很多種工作流程,我們採用的一般是這樣,遠端建立一個主分支,本地每人建立功能分支,日常工作流程如下: 去自己的工作分支 $ git checkout work 1 工作 …. 提交工作分支的修改 $ git commit -a 1 回到主分支 $ git
一條SQL查詢一個屬性,多個屬性值的情況
cat sele 屬性 clas family 獲取 sql 查詢 group 原先sql獲取角色對應的權限信息: select a.*, group_concat(b.auth_name) as auth_name from sh_role a left join sh_
C語言及程式設計進階例程-2 一個程式,多個檔案
演示:建立多檔案的專案main.c#include <stdio.h> int max(int x,int y); int main( ) { int a,b,c; printf("輸入兩數:"); scanf("%d %d", &a, &b
Jquery--一個form中兩個submit事件如何進行區分
一個form表單中,需要有兩個或多個submit操作,如何進行區分呢? ----- 可以通過修改submit的attr的name值來動態指定需要指定的動作jQuery("#submit_input").attr("name","event
MVC一個form內兩個submit按鈕跳轉Controller內不同的Action方法
有次做專案,發現一個問題,不用ajax的話,在一個form裡面 怎麼寫兩個提交按鈕呢,兩個提交按鈕跳轉到不同的action。通過網頁查閱資料,發現一個好用的方法,分享給大家! 後端部分 首先新建一個類,類名 MultiButtonAttribute
多個按鈕提交一個form表單
class 按鈕 控制 () ctx submit repo rep 事件 多個按鈕提交一個form表單,然後執行控制層不同的方法 在button的onclick事件下可以重寫form的action屬性 <button class="common_button" on
在一個form表單中實現多個submit不同的action
var ctype 編號 表單 顯示 col 格式 action 否則 在button中用JS的事件綁定onclick實現,如下: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
lvs 一個網卡單個管理ip,多個跨網段VIP解決辦法
lvs keepalived 說明:lvs的vip和realserver的rip是可以跨網段的ifconfig輸出如下:[[email protected]/* */ scripts]# ifconfig eth0 Link encap:Ethernet HWaddr 00:
連表查詢(3)之根據相關條件,查詢另外一個表或多個表的某字段
兩個 mode object 添加 就會 resultmap control var 多個 1、送檢單位 代理商是從代理商表中取得數據 銷售人員從銷售表中取得數據 說一個簡單的思路: sql語句找到連接兩個表的條件,把另外一個表要用到的字段 寫一個 <re
QT之QSignalMapper(可以理解為轉發器,多個按鈕綁定到一個Edit上,且能分辨。每個單獨連接的話,反而麻煩)
this 不同的 lan each b2c etc gpo 知識點 span QT之QSignalMapper QT之QSignalMapper 簡述 效果圖 上代碼 相關知識點文章 結尾 簡述 QSign
Apollo配置中心解惑(一):關於一個portal管理多個環境,要求環境相互之間不影響,獨立
pan program encoding character 建立 環境部署 fat == 127.0.0.1 關於作者的回答很官方,不太懂: https://github.com/ctripcorp/apollo/wiki/%E5%88%86%E5%B8%83%E5%BC
一個tomcat部署多個專案(同埠,多專案,不同訪問路徑)
使用tomcat的自動部署。(適用於檔案和war包,不需要重啟tomcat服務) 自定義web部署檔案。(只適用於檔案形式的,需要重啟tomcat服務) 一,自動部署 步驟: 瀏覽器輸入127.0.0.1:8080(如果你安裝時,改了埠的話,更改成你設定的埠),
一個頁面有多個script標籤時,執行順序
JavaScript直譯器在執行指令碼時,是按塊執行的。通俗地說,就是瀏覽器在解析HTML文件流時,如果遇到一個script標籤,則JavaScript直譯器會等到這個程式碼塊都載入完成後,先對程式碼塊進行預編譯,然後再執行。執行完畢後,瀏覽器會繼續解析下面的HTML文件流,同時JavaSc
一個Activity中多個Fragment,個別fragment實現沉浸式狀態列
如上圖,同一個activity(NoActionBar)有多個fragment的情況下,只有"我的"模組需要設定為沉浸式的狀態列,而其他fragmen
【laravel】 複雜表單請求驗證類,實現一個類對應多個表單
一、序言 laravel 中提供了兩種驗證請求資料的方法,第一種方法適用於簡單的驗證,表單驗證和業務邏輯放在一起,顯得業務程式碼臃腫,而且重複的驗證規則基本也是複製貼上,程式碼也不好看,這是關鍵。本篇教程就不說這個了,需要了解的請戳這裡。第二種就是建立請求驗證類,下面就詳細說
Java:假設車庫有3個車位(可以通過boolean[]陣列來表示車庫)可以停車,寫一個程式模擬多個使用者開車離開,停車入庫的效果。注意:車位有車時不能停車。
假設車庫有3個車位(可以通過boolean[]陣列來表示車庫)可以停車,寫一個程式模擬多個使用者開車離開,停車入庫的效果。注意:車位有車時不能停車。 1)使用阻塞佇列來實現(BlockingQueue<T>) Producer類 package com.多執行緒停車問
【laravel】 複雜表單請求驗證類,實現一個類對應多個表單
一、序言 laravel 中提供了兩種驗證請求資料的方法,第一種方法適用於簡單的驗證,表單驗證和業務邏輯放在一起,顯得業務程式碼臃腫,而且重複的驗證規則基本也是複製貼上,程式碼也不好看,這是關鍵
SQL 用多個條件進行排序;以及根據一個條件的多個值,進行排序
1、先說第一個用多個條件進行排序 ORDER BY name,age (多條件排序,還有條件可以再加在後面) ORDER BY name desc,age&nb