呼叫Action中的自定義方法(4種方式)
Action中的execute()方法是預設方法,在執行時被自動呼叫。但也允許在Action中自定義方法。可以在Action中自定義多個方法,分別處理不同的邏輯。當Action 中使用了自定義方法,該Action 就需要特定的配置,一般有四種呼叫方式: (1)使用struts.xml 檔案中的method屬性; (2)使用動態方法呼叫方式(DMI); (3)使用提交按鈕的method屬性; (4)使用萬用字元配置Action;
介紹這四種方式之前,先給出一個Action類,下面的介紹均用該類進行說明。
package cn.edu.zjut.action; import com.opensymphony.xwork2.ActionSupport; import cn.edu.zjut.service.UserService; import cn.edu.zjut.bean.UserBean; public class UserAction extends ActionSupport{ private UserBean loginUser; ......//省略getters和setters方法 public String login() { UserService userServ = new UserService(); if (userServ.login(loginUser)) { return "loginSuccess"; } else { return "loginFail"; } } public String register() { UserService userServ = new UserService(); if (userServ.register(loginUser)) { return "registerSuccess"; } return "registerFail"; } }
一、使用struts.xml檔案中的method屬性
在struts.xml檔案中配置多個Action,一個方法對應一個Action,將每個Action標籤的method屬性值改為要呼叫的方法名。
<action name="login" class="cn.edu.zjut.action.UserAction" method="login"> <result name="loginSuccess">/loginSuccess.jsp</result> <result name="loginFail">/login.jsp</result> </action> <action name="register" class="cn.edu.zjut.action.UserAction" method="register"> <result name="registerSuccess">/regSuccess.jsp</result> <result name="registerFail">/regFail.jsp</result> </action>
二、使用動態方法呼叫方式(DMI)
在struts.xml檔案中只配置一個Action,不指定method屬性值,要呼叫的方法名在訪問url中給出。 1)在struts.xml中開啟DMI: 加入語句:
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
2)Struts.xml中的Action配置:
<package name="strutsBean" extends="struts-default" namespace="/"> <action name="user" class="cn.edu.zjut.action.UserAction"> <result name="loginSuccess">/loginSuccess.jsp</result> <result name="loginFail">/loginFail.jsp</result> <result name="registerSuccess">/regSuccess.jsp</result> <result name="registerFail">/regFail.jsp</result> </action> </package>
②修改表單的的action屬性值: 登入頁面form表單改為`
<s:form action="user!login" method="post">`
註冊頁面form表單改為`
<s:form action="user!register" method="post">·`
(user為Action名,!後面的login和register是要呼叫的方法名。)
三、使用提交按鈕的method屬性
將提交按鈕的method屬性設定為要呼叫的方法名。Struts.xml中只需配置一個Action。 登入頁面的提交按鈕為:
<s:submit value="登入" method="login"/>
註冊頁面的提交按鈕為:
<s:submit value="註冊" method="register" />
四、使用萬用字元配置Action
用*表示任意字元,如user_*表示任何以user開頭的字串,將Action的name值改為“user_*”,表示該Action能匹配任何以“user_”開頭的Action請求。同時將method屬性設定為“{1}”,表示要呼叫的方法由第一個*指定。 因此,可以通過在form表單的action屬性值中將*替換為不同的方法名,達到訪問不同方法的目的。 該方式也只需配置一個Action。
Struts.xml中Action的配置:
<action name="user_*" class="cn.edu.zjut.action.UserAction" method="{1}">
登入頁面的form表單:
`<s:form action="user_login" method="post">`
註冊頁面的form表單:
<s:form action="user_register" method="post">·