在Struts2中,Action可以不实现任何特殊的接口或者继承特殊的类,仅仅是一个POJO(Plain Old Java Object,简单的Java对象)就可以;也可以实现Xwork2中的Action接口;但是由于Xwork的Action接口非常简单,为程序员提供的帮助有限,因此,在实际开发中,会更多的使用继承ActionSupport类来实现Action的方式,如下所示:
import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction extends ActionSupport { //省略了 }
ActionSupport类本身实现了Action接口,所以继承ActionSupport类就相当于实现了Action接口。除此之外,ActionSupport类还实现了其它几个接口,来为程序员提供更多使用的功能,这些接口和Struts2的一些其他特性相结合,可以实现基本的数据验证功能和国际化。接口如下所示:
com.opensymphony.xwork2.Validateable; //提供validate()方法来为Action增加验证的功能 com.opensymphony.xwork2.Validateaware; //提供方法来保存和恢复action或field级的错误信息 com.opensymphony.xwork2.TextProvider; //提供获取本地信息文本的功能 com.opensymphony.xwork2.LocaleProvider;//提供getLocale()方法来获取本地消息
1)基本的数据验证
- 要实现数据验证的功能,只需要在Action类中覆盖实现validate方法即可;在validate方法内部,对请求传递过来的数据进行校验,如果不满足要求,那么添加例外信息到父类用于存放例外的集合中。示例代码如下:
package cn.javass.hello.struts2impl.action; import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction extends ActionSupport { private String account; private String password; private String submitFlag; public String execute() throws Exception { this.businessExecute(); return "toWelcome"; } public void validate(){ if(account==null || account.trim().length()==0){ this.addFieldError("account", "账号不可以为空"); } if(password==null || password.trim().length()==0){ this.addFieldError("password", "密码不可以为空"); } if(password!=null && !"".equals(password.trim()) && password.trim().length()<6){ this.addFieldError("password", "密码长度至少为6位"); } } /** * 示例方法,表示可以执行业务逻辑处理的方法, */ public void businessExecute(){ System.out.println("用户输入的参数为==="+"account="+account+",password="+password+",submitFlag="+submitFlag); } public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSubmitFlag() { return submitFlag; } public void setSubmitFlag(String submitFlag) { this.submitFlag = submitFlag; } }