在Struts 2中,您将花费大部分时间进行操作。 动作类包含业务逻辑,检索资源束,保存数据,验证并选择应发送回用户的视图结果页面。 这是Struts 2的核心,因此您必须了解动作的基本概念。
1.行动
Struts 2动作不会强制您实现任何接口或扩展类,只需要您实现一个execute()方法,该方法返回一个字符串以指示应该返回哪个结果页面。
package com.mkyong.user.action;
public class LoginAction{
//business logic
public String execute() {
return "success";
}
}
在struts.xml中 ,使用操作标签和类属性配置操作类。 使用结果标签定义哪个结果页面应该返回给用户,以及使用名称属性可以访问该操作类的操作名称 。
<package name="user" namespace="/User" extends="struts-default">
<action name="validateUser" class="com.mkyong.user.action.LoginAction">
<result name="success">pages/welcome.jsp</result>
</action>
<package>
现在,您可以通过.action扩展名后缀访问操作。
http://localhost:8080/Struts2Example/User/validateUser.action
默认的.action是可配置的,只需更改“ struts.action.extension ”值即可。
2.可选的操作界面
Struts 2带有一个可选的动作接口( com.opensymphony.xwork2.Action )。 通过实现此接口,它带来一些便利的好处,请参见源代码:
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个常用常量值: 成功,错误,无,输入和逻辑 。 现在,动作类可以直接使用常量值。
package com.mkyong.user.action;
import com.opensymphony.xwork2.Action;
public class LoginAction{
//business logic
public String execute() {
return SUCCESS;
}
}
我不明白为什么许多Struts开发人员喜欢实现此Action接口,最好扩展ActionSupport。
3. ActionSupport
支持类,这是提供接口的默认实现的一种常见做法。
ActionSupport( com.opensymphony.xwork2.ActionSupport ),一个非常强大且方便的类,提供一些重要接口的默认实现:
public class ActionSupport implements Action, Validateable,
ValidationAware, TextProvider, LocaleProvider, Serializable {
...
}
ActionSupport类使您可以执行以下操作:
1.验证 –声明了validate()方法并将验证代码放入其中。
2.文本本地化 –使用GetText()方法从资源束中获取消息。
package com.mkyong.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"));
}
}
}
在大多数情况下,除非有理由不这样做,否则应扩展此类以提供方便的功能。 这也是一门很好的学习班,了解如何实现一些重要的Struts 2接口。
4.动作注解
Struts 2对注解有很好的支持,您可以删除XML文件,并在操作类中将其替换为@action 。
package com.mkyong.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;
}
}
如果您想进一步了解Struts 2注释,请下载此Struts 2注释示例进行练习。
结论
不用费神,只扩展ActionSupport类,它适合大多数情况。
翻译自: https://mkyong.com/struts2/working-with-struts-2-actions/