在Struts2中,大部分的業(yè)務(wù)都是由動作來完成的,。動作類包括業(yè)務(wù)邏輯,獲取資源包,保存數(shù)據(jù),驗證,并選擇應(yīng)該發(fā)送給用戶的視圖的結(jié)果頁面,動作是Struts2的核心。
1.動作-Action
Struts 2動作不強(qiáng)迫你實現(xiàn)任何接口或擴(kuò)展類,它只是需要你實現(xiàn)一個 execute()方法返回一個字符串來表示其應(yīng)該返回的結(jié)果頁面。
package com.xyl.user.action;
public class LoginAction{
//business logic
public String execute() {
return "success";
}
}
在Struts.xml總,配置實用Action類動作(action)標(biāo)記和類屬性。定義結(jié)果頁面用結(jié)果的標(biāo)簽和動作名稱返回給用戶,可以用它來訪問動作類的名稱屬性。
<package name="user" namespace="/User" extends="struts-default">
<action name="validateUser" class="com.yiibai.user.action.LoginAction">
<result name="success">pages/welcome.jsp</result>
</action>
<package>
2.可選動作接口
Struts 2帶有一個可選的動作接口(com.opensymphony.xwork2.Action)。通過實現(xiàn)這個接口,它帶來了一些方便和好處,看下面的源代碼:
package com.opensymphony.xwork2;
public interface Action {
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws Exception;
}
這個接口是非常簡單的,配有5常用常數(shù)值:
** ****success, error, none, input and logic**。現(xiàn)在的動作類可以直接使用常量。
package com.xyl.user.action;
import com.opensymphony.xwork2.Action;
public class LoginAction{
//business logic
public String execute() {
return SUCCESS;
}
}
3.ActionSupport
Support類,通常的做法是提供接口的默認(rèn)實現(xiàn)。
ActionSupport (com.opensymphony.xwork2.ActionSupport),
一個非常強(qiáng)大和方便的類,它提供了幾個重要接口的缺省實現(xiàn):
public class ActionSupport implements Action, Validateable,
ValidationAware, TextProvider, LocaleProvider, Serializable {
...
}
ActionSupport 類提供一些功能:
驗證 – 聲明一個validate()方法,并在里面實現(xiàn)驗證代碼。
-
文字本地化 – 使用gettext()方法來獲得資源包的消息。
package com.xyl.user.action; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private String username; private String password; public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } //business logic public String execute() { return "SUCCESS"; } //simple validation public void validate(){ if("".equals(getUsername())){ addFieldError("username", getText("username.required")); } if("".equals(getPassword())){ addFieldError("password", getText("password.required")); } } }
在大多數(shù)情況下,應(yīng)該擴(kuò)展此類妥當(dāng),方便提供功能,除非你有理由不這樣做。這也是一個很不錯的學(xué)習(xí)類,以了解如何做一些重要的Struts2接口的實現(xiàn)。
4.動作注釋
Struts 2對注解有很好的支持,你可以擺脫XML文件,并使用@action在動作類上替換。
package com.xyl.user.action;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/User")
@ResultPath(value="/")
public class ValidateUserAction extends ActionSupport{
@Action(value="Welcome", results={
@Result(name="success",location="pages/welcome_user.jsp")
})
public String execute() {
return SUCCESS;
}
}