1. 程式人生 > >呼叫Action中的自定義方法(4種方式)

呼叫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">·