Struts2数据校验
回忆一下struts1的校验(写在formBean里面,并且凡是Action使用了该FromBean,都会调用其FormBean里面的验证方法即validate方法),校验数据是属于业务逻辑,写在业务层应该更合适,可以说struts2的验证更为具体,可以验证到某个具体方法:
验证方法一、
所使用的Action继承ActionSupport并重写validate方法,这种方式会验证所Action里面的所有方法,code:
@Override
public void validate() {
if(info == null)
addFieldError("userName", "未输入用户名");//保存错误
}
第二种、
更为详细,可验证到具体的方法,该方法几乎与上一种如出一辙,也是继承ActionSupport类,但是不重写validate方法,而是validateXxx方法,Xxx为所需要验证方法的方法名,有点像getXxx/setXxx方法。Code:
public void validateLogin(){
String userName = info.getUserName();
if(userName == null || info.getUserName().trim().equals(""))
addFieldError("userName", "未输入用户名");
String password = info.getPassword();
if(password == null || info.getPassword().trim().equals(""))
addFieldError("password", "未输入密码");
}
验证login(登陆)方法
第三种、
框架验证,比较灵活,与上面两种思想上也存在着相似的地方:每个Action类有一个校验文件,命名 Action的简单类名-validation.xml,且与Action类同目录,当校验文件的取名为Action的简单类名-validation.xml时,会对 action中的所有处理方法实施输入验证。如果你只需要对action中的某个方法实施校验,那么,校验文件的取名应为:Action简单类名-ActionName-validation.xml,其中ActionName为struts.xml中action的名称即下面的user_*(注意,验证文件名不是UserAction-user_*-validate.xml,这里的’*’是方法名,该方法使用了通配符)。例如:在实际应用中,常用以下配置:
<action name="user_*" class="com.study.action.validate.UserAction" method="{1}">
<result name="input">/jsp/validate/login.jsp</result>
<result>/jsp/validate/welcome.jsp</result>
</action>
UserAction中有以下两个需要处理的方法:regist与loginpublic class UserAction extends ActionSupport
implements ModelDriven<UserInfo>{
private UserInfo info = new UserInfo();
public String login(){
return SUCCESS;
}
public String regist(){
return SUCCESS;
}
public String delete(){
return SUCCESS;
}
@Override
public UserInfo getModel(){
return info;
}
}
要对regist方法实施验证,校验文件的取名为:UserAction-user_regist-validation.xml要对login()方法实施验证,校验文件的取名为: UserAction-user_login-validation.xml,当然你可以将校验文件命名为UserAction-validation.xml来对UserAction中的所有方法都进行验证。校验文件如:UserAction-user_regist-validation.xml<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="userName">
<field-validator type="requiredstring">
<param name="trim">true</param><message>必须输入用户名</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<message>您输入的用户名只能是字母和数组,且长度必须在4到25之间 </message>
</field-validator>
</field>
</validators>
上面的type即黄色标出的在xwork[版本号].jar包里面com\opensymphony\xwork\validator\validators\default.xml中定义的,可选择用解压工具打开查看定义了那些type注意上面提到的一、二 2种方法都是写在Action里面,不是写在Bean里面,与struts1有所不同。在页面获取保存的错误信息可通过通过<s:fielderror>标签来获取(需要引人入struts2的tag:<%@ taglib prefix="s" uri="/struts-tags"%>),另外保存的错误可以是国际化配置文件的值;即:支持国际化;本章节暂不介绍,稍后将在后面的文档:struts2的国际化中讲解。
【写在后面】
笔者提示,方法不在于多,在于合适、熟练。配置文件不必牢记背诵,讲解至现在,配置量比较多大了,只需要知其意就行了,在开发中大多数都是copy再改改就达到目的了,总之谁背谁傻瓜,当然有些关键字还是要记住的,不然在网络上查找东西都不知道用什么关键字,岂不愁煞人。在网络上自觉学习是一种良好的自学能力的表现