【第2步】實現Action類(MoreSubmitAction)
1 package action;
2
3 import javax.servlet.http.*;
4 import com.opensymphony.xwork2.ActionSupport;
5 import org.apache.struts2.interceptor.*;
6 public class MoreSubmitAction extends ActionSupport implements ServletRequestAware
7 {
8 private String msg;
9 private javax.servlet.http.HttpServletRequest request;
10 // 獲得HttpServletRequest對象
11 public void setServletRequest(HttpServletRequest request)
12 {
13 this.request = request;
14 }
15 // 處理save submit按鈕的動作
16 public String save() throws Exception
17 {
18 request.setAttribute("result", "成功保存[" + msg + "]");
19 return "save";
20 }
21 // 處理print submit按鈕的動作
22 public String print() throws Exception
23 {
24 request.setAttribute("result", "成功打印[" + msg + "]");
25 return "print";
26 }
27 public String getMsg()
28 {
29 return msg;
30 }
31 public void setMsg(String msg)
32 {
33 this.msg = msg;
34 }
35 }
上面的代碼需要注意如下兩點:
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的代碼如下:
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE struts PUBLIC
3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
4 "http://struts.apache.org/dtds/struts-2.0.dtd">
5 <struts>
6 <package name="demo" extends="struts-default" >
7 <action name="submit" class="action.MoreSubmitAction">
8 <result name="save" >
9 /result.jsp
10 </result>
11 <result name="print">
12 /result.jsp
13 </result>
14 </action>
15 </package>
16 </struts>
【第4步】編寫結果頁(result.jsp)
1 <%@ page pageEncoding="GBK"%>
2 <html>
3 <head>
4 <title>提交結果</title>
5 </head>
6 <body>
7 <h1>${result}</h1>
8 </body>
9 </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
以前為了寫這個想了很長時間,才知道原來name這個屬性作用還真的蠻大。
其實再非struts標簽中,即純粹的html標簽中也可以使用,寫法為:
<input type="submit" name="method:save" value="save"/>
<input type="submit" name="method:print" value="print"/>
上文出自nokiaguy的個人博客,如果想查看原文請點擊《
Struts2教程2:處理一個form多個submit
》