struts 2动作不强迫你实现任何接口或扩展类,它只是需要你实现一个 execute()方法返回一个字符串来表示其应该返回的结果页面。
package com.h3.user.action;
public class loginaction{
//business logic
public string execute() {
return "success";
}
}
在struts.xml中,配置使用action类动作(action)标记和类属性。定义结果页面用结果的标签和动作名称返回给用户,可以用它来访问动作类的名称属性。
<package name="user" namespace="/user" extends="struts-default">
<action name="validateuser" class="com.h3.user.action.loginaction">
<result name="success">pages/welcome.jsp</result>
</action>
<package>
http://localhost:8080/struts2example/user/validateuser.action
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常用常数值: success, error, none, input and logic。现在的动作类可以直接使用常量。
package com.h3.user.action;
import com.opensymphony.xwork2.action;
public class loginaction{
//business logic
public string execute() {
return success;
}
}
actionsupport (com.opensymphony.xwork2.actionsupport), 一个非常强大和方便的类,它提供了几个重要接口的缺省实现:
public class actionsupport implements action, validateable,
validationaware, textprovider, localeprovider, serializable {
...
}
actionsupport 类提供一些功能:
1. 验证 – 声明一个validate()方法,并在里面实现验证代码。
2. 文字本地化 – 使用gettext()方法来获得资源包的消息。
package com.h3.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对注解有很好的支持,你可以摆脱xml文件,并使用@action在动作类上替换。
package com.h3.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;
}
}