struts一個action處理多個方法
在前面的介紹中,我們瞭解了struts的action是實現execute()方法來完成業務邏輯的,可是,在實際開發中,讓一個業務邏輯對應一個Acton類是不現實的,通常我們都是在一個action中定義多個方法的。
下面瞭解一下strtus1和struts2在一個action中處理多個方法的實現。
struts1:
struts1中一個action處理多個方法,通過讓action繼承DispachAction來實現
1. action繼承DispachAction,並實現多個方法的業務邏輯
public class LogonAction extends DispatchAction { public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //業務邏輯 return mapping.findForward("success"); } public ActionForward logon(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception { return mapping.findForward("success"); } public ActionForward register(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception { return mapping.findForward("success"); }
2. strtus-config.xml配置檔案中,每個action標籤後面,加上parameter=""這個屬性
<action path="/user" type="com.tgb.struts1.LogonAction" name="logonForm" parameter="method"> <forward name="success" path="/success.jsp"></forward> <forward name="error" path="/error.jsp"></forward> </action>
3. 頁面提交時確定執行action中的哪個方法,如果不指定,則執行action中的unspecified()方法.
<form action="user" mehtod="post">
<input type="hidden" name="method" value="logon">
struts2:
action中定義多個方法:
public String logon(){ return"success"; } publicString register(){ return"success"; }
有三種方式可以將頁面提交和action的方法對應。
(一)動態方法呼叫,配置檔案不變,一個action類對應配置檔案中一個action標籤,表單提交的action不直接等於某個action的name,而是以action的name!action的方法名來提交。
1. 配置檔案
<action name="user" class="com.tgb.struts2.action.LogonAction" >
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
2. 表單提交
登入:<form id="form" action="user!logon" method="post">
註冊:<form id="form" action="user!register" method="post">
(二)修改配置檔案,將同一個action中的每個方法都用一個action標籤對映
1. 配置檔案
<action name="logon" class="com.tgb.struts2.action.LogonAction" >
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
<action name="register" class="com.tgb.struts2.action.LogonAction" >
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
2. 表單提交
登入:<form id="form" action="logon" method="post">
註冊:<form id="form" action="register" method="post">
(三)使用萬用字元對映方式
1. 配置檔案
<action name="*User_*" class="com.tgb.struts2.action.LogonAction" method="{1}" >
<result name="success">/{2}.jsp</result>
<result name="error">/error.jsp</result>
</action>
2. 表單提交
<form id="form" action="logonUser_index" method="post"><!-- 執行action中的logon方法,執行成功後返回index首頁面 -->
<form id="form" action="registerUser_logon" method="post"><!--執行action中的register方法,執行成功後返回logon登入頁面 -->
這三種方式中,使用!會暴露所使用的框架,第二種方式會使配置檔案變得複雜冗餘,第三種方式中和了前兩種方式的缺點,建議使用萬用字元對映方式。