在Struts2中,大部分的業(yè)務(wù)都是由動(dòng)作來(lái)完成的处铛,饲趋。動(dòng)作類包括業(yè)務(wù)邏輯,獲取資源包撤蟆,保存數(shù)據(jù)奕塑,驗(yàn)證,并選擇應(yīng)該發(fā)送給用戶的視圖的結(jié)果頁(yè)面家肯,動(dòng)作是Struts2的核心龄砰。
1.動(dòng)作-Action
Struts 2動(dòng)作不強(qiáng)迫你實(shí)現(xiàn)任何接口或擴(kuò)展類,它只是需要你實(shí)現(xiàn)一個(gè) execute()方法返回一個(gè)字符串來(lái)表示其應(yīng)該返回的結(jié)果頁(yè)面讨衣。
package com.xyl.user.action;
public class LoginAction{
//business logic
public String execute() {
return "success";
}
}
在Struts.xml總换棚,配置實(shí)用Action類動(dòng)作(action)標(biāo)記和類屬性。定義結(jié)果頁(yè)面用結(jié)果的標(biāo)簽和動(dòng)作名稱返回給用戶反镇,可以用它來(lái)訪問(wèn)動(dòng)作類的名稱屬性固蚤。
<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.可選動(dòng)作接口
Struts 2帶有一個(gè)可選的動(dòng)作接口(com.opensymphony.xwork2.Action)。通過(guò)實(shí)現(xiàn)這個(gè)接口歹茶,它帶來(lái)了一些方便和好處夕玩,看下面的源代碼:
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;
}
這個(gè)接口是非常簡(jiǎn)單的,配有5常用常數(shù)值:
** ****success, error, none, input and logic**【颍現(xiàn)在的動(dòng)作類可以直接使用常量燎孟。
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)實(shí)現(xiàn)尸昧。
ActionSupport (com.opensymphony.xwork2.ActionSupport),
一個(gè)非常強(qiáng)大和方便的類揩页,它提供了幾個(gè)重要接口的缺省實(shí)現(xiàn):
public class ActionSupport implements Action, Validateable,
ValidationAware, TextProvider, LocaleProvider, Serializable {
...
}
ActionSupport 類提供一些功能:
驗(yàn)證 – 聲明一個(gè)validate()方法,并在里面實(shí)現(xiàn)驗(yàn)證代碼彻磁。
-
文字本地化 – 使用gettext()方法來(lái)獲得資源包的消息碍沐。
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),方便提供功能累提,除非你有理由不這樣做尘喝。這也是一個(gè)很不錯(cuò)的學(xué)習(xí)類,以了解如何做一些重要的Struts2接口的實(shí)現(xiàn)斋陪。
4.動(dòng)作注釋
Struts 2對(duì)注解有很好的支持朽褪,你可以擺脫XML文件,并使用@action在動(dòng)作類上替換无虚。
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;
}
}