struts2.3.1.2 使用動態方法配置 Action,使得一個Action可以處理多個請求


Struts2中有時可能會需要使用一個Action來處理多個請求,來提高編碼的效率和減少代碼量。例如,在登錄界面上的表單中可能會有登錄和注冊兩個事件請求,有幾種方式可以借鑒:

1.采用DMI動態調用方法。

  該方法的主要思想是在一個 Action 類中實現多個方法,然后每個 action 請求中表明要調用該類中的哪個方法。使用 actionname!method 方式調用。

  (1)LoginAction 類代碼如下:

View Code
 1 package com.main.action;
 2 
 3 import com.opensymphony.xwork2.ActionSupport;
 4 
 5 public class LoginAction extends ActionSupport {
 6     private String username;
 7     private String psd;
 8     
 9     public String login(){
10         if ("lihui".equals(username) && "xhh".equals(psd)) {
11             return SUCCESS;
12         } else {
13             return ERROR;
14         }
15     }
16     
17     public String regist(){
18         return "regist";
19     }
20     
21     public void setUsername(String username){
22         this.username = username;
23     }
24     
25     public String getUsername(){
26         return this.username;
27     }
28     
29     public void setPsd(String psd){
30         this.psd = psd;
31     }
32     
33     public String getPsd(){
34         return this.psd;
35     }
36 }

  (2)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 
 6 <struts>
 7     <package name="default" namespace="/" extends="struts-default">
 8         <action name="login" class="com.main.action.LoginAction">
 9             <result name="success">/success.jsp</result>
10             <result name="error">/error.jsp</result>
11             <result name="regist">/regist.jsp</result>
12         </action>
13     </package>
14 </struts>

  (3)在jsp中的action請求代碼如下:

 1   <body>
 2       <script type="text/javascript">
 3           function regist(){
 4               var form = document.forms[0];
 5               form.action = "login!regist";
 6               form.submit();
 7           }
 8       </script>
 9     <form action="login!login">
10         姓名:<input type="text" name="username" /><br/>
11         密碼:<input type="password" name="psd" /><br/>
12         <input type="submit" value="登錄" />
13         <input type="submit" value="注冊" onclick="regist();">
14     </form>
15   </body>

2.直接指定 Action 元素的 method 屬性

  使用這個方法就不必用 ! 將action和method連接后調用了,struts.xml 配置如下:

 1 <struts>
 2     <package name="default" namespace="/" extends="struts-default">
 3         <action name="login" class="com.main.action.LoginAction" method="login">
 4             <result name="success">/success.jsp</result>
 5             <result name="error">/error.jsp</result>
 6         </action>
 7         <action name="regist" class="com.main.action.LoginAction" method="regist">
 8             <result name="regist">/regist.jsp</result>
 9         </action>
10     </package>
11 </struts>

3.使用通配符處理

  <action>的屬性name class method 都支持通配符。struts.xml 配置如下:

1 <struts>
2     <package name="default" namespace="/" extends="struts-default">
3         <action name="login_*" class="com.main.action.LoginAction" method="{1}">
4             <result name="success">/success.jsp</result>
5             <result name="error">/error.jsp</result>
6             <result name="regist">/regist.jsp</result>
7         </action>
8     </package>
9 </struts>

  關鍵就在於第三行代碼, login_* 使用了通配符,所以接收所有類似的action請求,至於調用該類中的哪個方法,就看method="{1}",表示使用name屬性第一個*的值。例如,在本例中,form的action屬性值設置為 login_regist,則調用com.main.action.LoginAction類中的regist()方法。


此外,Struts支持默認 Action 請求。當系統找不到指定的Action時,則交給默認的Action去處理。在struts.xml中的配置為:

<package ...>

  <default-action-ref name="login"></default-action-ref>

</package>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM