strust2提供了强大的校验框架。而strust2也可以分为客户端校验和服务器端校验。
1、 客户端校验。
客户端的校验也是依赖于服务器端的校验的,想要执行客户端校验,首先还是把服务器端的校验文件配置好。然后在在jsp页面的form中不能有自己的主题设置(theme),而且还要加一个属性validate="true"。才能执行客户端校验。但是客户端校验很弱。一般采用的是服务器端校验
2、 服务器端校验。
想要执行服务器端的校验,那么就要首先配置好校验文件。配置文件的位置与jsp页面的form的提交到的那个action类的同一包体下面。而且名字也是要一定的规范。比如说action名称为LoginAction,那么校验文件为:LoginAction-validation.xml。而这样写默认是在action中执行execute()方法的时候执行校验,但是如果你想执行在自己写的方法中去校验的话,那么就这么写LoginAction-login-validation.xml意思是在LoginAction类中执行login方法的时候,就会执行校验,但是如果此时你还存在LoginAction-validation.xml的话,那么LoginAction-validation.xml也还是会被执行校验的。
校验文件的开头不分为:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
校验的内容参照为:
Xwork包下的com.opensymphony.xwork2下的validator/valudators中的default.xml
下面以登陆为例子:
在regiest.jsp
<s:fielderror cssStyle="color:red"/>
<!—校验错误的展现,默认的fielderror级别的错误-à
LoginAction类
public class LoginAction extends ActionSupport{
private int uid;
private String uname;
private String sex;
private int age;
private String email;
private Date birthday;
private String phone;
public LoginAction() {
}
@Override
public String execute() throws Exception {
return this.SUCCESS;
}
@Override
public void validate() {
}......set和get方法略
}
LoginAction-validation.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!-- 对uid的校验 -->
<field name="uid">
<field-validator type="required"><!-- 必填的 -->
<message>uid should be required!</message>
</field-validator>
<field-validator type="int">
<param name="max">10000</param>
<param name="min">1</param>
<message>uid should be between ${min} and ${max}</message>
</field-validator>
</field>
<!-- 对uname的校验 -->
<field name="uname">
<field-validator type="requiredstring"><!-- 必填的字符串 -->
<!--<param name="trim">true</param> 去掉空格,可以省略,默认为true -->
<message>uname should not be blank!</message>
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message>
uname should be between ${minLength} and ${maxLength}
</message>
</field-validator>
</field>
<!-- 对sex的校验 -->
<field name="sex">
<field-validator type="requiredstring">
<message>sex should should be required!</message>
</field-validator>
</field>
<!-- 对age的校验 -->
<field name="age">
<field-validator type="int">
<param name="max">11</param>
<param name="min">80</param>
<message>age should be between</message>
</field-validator>
</field>
<!-- 对birthday的校验 -->
<field name="birthday">
<field-validator type="required"><!-- 必填的 -->
<message>birthday should not be blank!</message>
</field-validator>
<field-validator type="date">
<param name="max">2009-1-1</param>
<param name="min">1980-1-1</param>
<message>
birthday should be between ${min} and ${max}
</message>
</field-validator>
</field>
<!-- email的校验 -->
<field name="email">
<field-validator type="requiredstring"><!-- 必填的字符串 -->
<message>email should not be blank!</message>
</field-validator>
<field-validator type="email">
<message>email is error!</message>
</field-validator>
</field>
<field name="phone">
<field-validator type="requiredstring"><!-- 必填的字符串 -->
<message>phone should not be blank!</message>
</field-validator>
<field-validator type="regex"><!—正则表达式-à
<param name="expression">
^\(?(\d{3,4})\)?[-| ]?(\d{3,4})[-| ]?(\d{4})$
</param>
<message>phone is invalid!</message>
</field-validator>
</field>
</validators>
注意在jsp页面<s:fielderror cssStyle="color:red"/>取出现校验错误的值。
如果在LoginAction中的valdate方法中还定义的一个名称相同,但是值不同的错误。
比如说
public void validate() {
this.addFieldError("uname", "uname is error");
}
而如果在提交的时候校验uname真的出错,在jsp页面用<s:fielderror/>站下错误的时候。
uname的错误信息会得到两条(在校验文件如果对一个属性定义多个校验的时候。当校验到出错时,就不会再往下对该属性进行校验)。"uname is error"也是会被展现出来的。比校验文件的错误信息后展现。
现在对fielderror进行解析:fielderror其实是LinkHashMap。键为String类型的,而值为ArrayList类型的
消息资源国际化:
在LoginAction.properties配置文件中,是专门对应的LoginAction类的,在同一个包体下。
uid.invalid=\u7528\u6237\u7f16\u53f7\u51fa\u9519 \u7f16\u53f7\u5fc5\u987b\u5728 ${min} \u548c ${max}\u4e4b\u95f4
这里只写了一个。
因而得到在LoginValidate.xml配置文件中就改为:
<field name="uid">
<field-validator type="required"><!-- 必填的 -->
<message>uid should be required!</message>
</field-validator>
<field-validator type="int">
<param name="max">10000</param>
<param name="min">1</param>
<message key="uid.invalid">
</message>
</field-validator>
</field>
。。。。。。校验框架先实现到这。。。。。。