1. 程式人生 > >struts一個action處理多個方法

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不直接等於某個actionname,而是以actionname!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登入頁面  -->

        這三種方式中,使用!會暴露所使用的框架,第二種方式會使配置檔案變得複雜冗餘,第三種方式中和了前兩種方式的缺點,建議使用萬用字元對映方式。