http://code.google.com/p/j2eewiki/wiki/Struts2Validator
Action配置中一定要设置input返回页面
添加验证只要创建验证的xml文件
1.创建xml文件名
验证Action中全部方法
在Action同包下,创建:Action类名-validation.xml
如:ValidateAction创建ValidateAction-validation.xml
验证Action中单个方法
<!-- 每个方法单独配置一个Action -->
<!-- 在Action同包下,创建:Action类名-action方法配置名称-validation.xml -->
<action name="validateAdd" class="com.struts2.validator.ValidateAction" method="add">
<!-- 要创建ValidateAction-validateAdd-validation.xml -->
<!-- 使用通配符配置 -->
<!-- 在Action同包下,创建:Action类名-action方法对应的名称-validation.xml -->
<action name="validate_*" class="com.struts2.validator.ValidateAction" method="{1}">
<!-- 要创建ValidateAction-validate_add-validation.xml,validate_add为访问这个action方法的路径 -->
注意事项
注意:
1.要验证的方法不能叫input.
2.这样配置在form表单中要在<s:form action="validate_add">中action写好名称,
不能写action="validate_",然后<s:submit value="提交"method="add" />
这样会找不到对应的配置文件,跳过验证.
3.如果验证出错,返回input页面时,那些存在ValueStack中的值会丢失,可以将Action实现Preparable接口,
然后prepare()方法里初始化添加页面需要的值.
4.如果使用Preparable接口,必须在action配置中添加<interceptor-ref name="paramsPrepareParamsStack" />.
这样prepare()才能得到form提交的参数.
2.创建xml内容
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!-- 要验证的字段名称 -->
<!-- 要验证Action中UserBean的id字段,name="userBean.id"(userBean为Action中的变量名) -->
<field name="mail">
<!-- type要验证的类型,short-circuit(默认false),true含义,如果当前验证失败了,下面的验证就不执行了.如requiredstring失败了,email就不验证了. -->
<!-- field-validator下面可以有多个param元素,但是最多只能有一个message -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>Please enter a mail</message>
</field-validator>
<field-validator type="email">
<message>
Invalid MAIL
</message>
</field-validator>
</field>
</validators>
Struts内建验证程序(type的值)
required
保证字段的值不是空值null.空字符串不是空值null.
<field name="userName">
<field-validator type="required">
<message>Please enter a user name</message>
</field-validator>
</field>
requiredstring
保证字段不是空值null,也不是空白(empty).
param:trim(boolean) ->true->去除前后空格
<field name="userName">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>Please enter a user name</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">false</param>
<message>Please enter a password</message>
</field-validator>
</field>
int
验证字段值是否可以转换为一个整数.
param: min(int);max(int)
<field name="yeaar">
<field-validator type="int">
<param name="min">1999</param>
<param name="max">2010</param>
<message>year:1999-2010</message>
</field-validator>
</field>
date
验证给定日期字段的值是否在一个给定的范围内.
param:max(date);min(date)
<field name="borthday">
<field-validator type="int">
<!-- 格式取决于当前地理时区 -->
<param name="min">1999-01-01</param>
<param name="max">2010-01-01</param>
<message>birthday:1999-2010</message>
</field-validator>
</field>
email
给定的String值是否是一个电子邮件地址
<field name="email">
<field-validator type="email">
<message>Invalid email</message>
</field-validator>
</field>
url
给定的String值是否是一个合法的URL(要有前缀)
<field name="url">
<field-validator type="url">
<message>Invalid URL</message>
</field-validator>
</field>
expression,fieldexpression
验证给定字段是否满足一个OGNL表达式.
区别:expression 不是一个字段验证程序,失败时将生成一个动作错误.(JSP中调用
<actionerror>
</actionerror>
才显示出错信息)
fieldexpression 是一个字段验证程序,失败时将抛出一个字段错误.(对字段验证)
param:expression(String)OGNL表达式
expression:
public class ExpressionTestAction {
//属性生成get,set
private int min;
private int max;
}
<validator type="expression">
<param name="expression">
max > min
</param>
<message>
Maximum temperature must be greater than Minimum temperature
</message>
</validator>
<!-- jsp -->
<s:actionerror/>
fieldexpression:
public class FieldExpressionTestAction {
//属性生成get,set
private int min;
private int max;
}
<!-- 对字段验证 -->
<field name="max">
<field-validator type="fieldexpression">
<param name="expression">
max > min
</param>
<message>
Maximum temperature must be greater than Minimum temperature
</message>
</field-validator>
</field>
visitor
把同一个验证程序配置文件用于多个动作(对一个Bean写验证文件,每个使用的Action只要引用)
//UserBean
public class UserBean {
//属性get,set
private String name;
private int age;
}
//UserBean-validation.xml(和UserBean放在同一个包中)
<field name="name">
<field-validator type="requiredstring">
<message>用户名必须</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">18</param>
<param name="max">99</param>
<message>Age must be between 18 and 99</message>
</field-validator>
</field>
//Action的validation.xml
<!-- userBean变量名 -->
<field name="userBean">
<field-validator type="visitor">
<!-- message会和UserBean验证中的message一起显示 -->
<message>用户: </message>
</field-validator>
</field>
如果另一个Action对UserBean使用另一个标准的验证,可以创建新的验证文件
//UserBean-specific-validation.xml
<!-- 和之前的验证不同 -->
<field name="age">
<field-validator type="int">
<param name="min">30</param>
<param name="max">50</param>
<message>Age must be between 30 and 50</message>
</field-validator>
</field>
//另一个Action的validation.xml
<field name="userBean">
<field-validator type="visitor">
<!-- xml中扩展的名字,执行UserBean-specific-validation.xml的验证 -->
<param name="context">specific</param>
<message>用户1: </message>
</field-validator>
</field>
conversion
检查对某个属性进行类型转换是否会导致一个转换错误
<field name="age">
<field-validator type="conversion">
<message>
An age must be an integer.
</message>
</field-validator>
</field>
stringlength
验证一个非空的字段值是不是足够的长度
param:minLength(int);maxLength(int);trim(boolean)
<field name="password">
<field-validator type="requiredstring">
<param name="minLength">6</param>
<param name="maxLength">14</param>
<message>length:6-14</message>
</field-validator>
</field>
regex
给定的值是否与一个给定的正则表达式匹配
param:expression(String)正则表达式;caseSensitive(boolean)是否区别大小写,默认为true;trim(boolean)是否去除前后空格
<field name="phone">
<field-validator type="regex">
<param name="expression">
<![CDATA[\d\d\d\-\d\d\d\-\d\d\d\d]]>
</param>
<message>
Invalid phone number or invalid format
</message>
</field-validator>
</field>
3.在action中验证
利用Validateable接口实现验证,实现void validate()方法.
ActionSupport类已经实现了这个接口
//继承ActionSupport
public class User extends ActionSupport {
//属性get,set
private String userName;
private String password;
private static List<String> userNames = new ArrayList<String>();
static {
userNames.add("harry");
userNames.add("sally");
}
//验证方法
public void validate() {
if (userNames.contains(userName)) {
//添加出错信息
addFieldError("userName", "'" + userName + "' has been taken.");
}
}
}
4.自定义验证类
要创建一个普通的验证程序(非字段验证程序),扩展ValidatorSupport类.验证失败要从validate方法调用addActionError方法.
要创建一个字段验证程序,扩展FieldValidatorSupport类.验证失败要从validate方法调用addFieldError方法.
如果要能接受参数,要在类中定义一个相应的属性,并生成get,set.
编写类
public class StrongPasswordValidator extends FieldValidatorSupport {
//属性
private int minLength = -1;
public void setMinLength(int minLength) {
this.minLength = minLength;
}
public int getMinLength() {
return minLength;
}
//验证方法
public void validate(Object object) throws ValidationException {
String fieldName = getFieldName();
String value = (String) getFieldValue(fieldName, object);
if (value == null || value.length() <= 0) {
// use a required validator for these
return;
}
if ((minLength > -1) && (value.length() < minLength)) {
addFieldError(fieldName, object);
} else if (!isPasswordStrong(value)) {
addFieldError(fieldName, object);
}
}
private static final String GROUP_1 = "abcdefghijklmnopqrstuvwxyz";
private static final String GROUP_2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String GROUP_3 = "0123456789";
protected boolean isPasswordStrong(String password) {
boolean ok1 = false;
boolean ok2 = false;
boolean ok3 = false;
int length = password.length();
for (int i = 0; i < length; i++) {
if (ok1 && ok2 && ok3) {
break;
}
String character = password.substring(i, i + 1);
System.out.println("character:" + character);
if (GROUP_1.contains(character)) {
ok1 = true;
continue;
}
if (GROUP_2.contains(character)) {
ok2 = true;
continue;
}
if (GROUP_3.contains(character)) {
ok3 = true;
}
}
return (ok1 && ok2 && ok3);
}
}
注册xml
在src下创建validators.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator Config 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
<!-- 名称(type对应值),类路径 -->
<validator name="strongpassword" class="com.validator.StrongPasswordValidator"/>
</validators>
使用验证
<field name="password">
<field-validator type="strongpassword">
<param name="minLength">8</param>
<message>
Password must be at least 8 characters long
and contains at least one lower case character,
one upper case character, and a digit.
</message>
</field-validator>
</field>
Action配置中一定要设置input返回页面
添加验证只要创建验证的xml文件
1.创建xml文件名
验证Action中全部方法
在Action同包下,创建:Action类名-validation.xml
如:ValidateAction创建ValidateAction-validation.xml
验证Action中单个方法
<!-- 每个方法单独配置一个Action -->
<!-- 在Action同包下,创建:Action类名-action方法配置名称-validation.xml -->
<action name="validateAdd" class="com.struts2.validator.ValidateAction" method="add">
<!-- 要创建ValidateAction-validateAdd-validation.xml -->
<!-- 使用通配符配置 -->
<!-- 在Action同包下,创建:Action类名-action方法对应的名称-validation.xml -->
<action name="validate_*" class="com.struts2.validator.ValidateAction" method="{1}">
<!-- 要创建ValidateAction-validate_add-validation.xml,validate_add为访问这个action方法的路径 -->
注意事项
注意:
1.要验证的方法不能叫input.
2.这样配置在form表单中要在<s:form action="validate_add">中action写好名称,
不能写action="validate_",然后<s:submit value="提交"method="add" />
这样会找不到对应的配置文件,跳过验证.
3.如果验证出错,返回input页面时,那些存在ValueStack中的值会丢失,可以将Action实现Preparable接口,
然后prepare()方法里初始化添加页面需要的值.
4.如果使用Preparable接口,必须在action配置中添加<interceptor-ref name="paramsPrepareParamsStack" />.
这样prepare()才能得到form提交的参数.
2.创建xml内容
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<!-- 要验证的字段名称 -->
<!-- 要验证Action中UserBean的id字段,name="userBean.id"(userBean为Action中的变量名) -->
<field name="mail">
<!-- type要验证的类型,short-circuit(默认false),true含义,如果当前验证失败了,下面的验证就不执行了.如requiredstring失败了,email就不验证了. -->
<!-- field-validator下面可以有多个param元素,但是最多只能有一个message -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>Please enter a mail</message>
</field-validator>
<field-validator type="email">
<message>
Invalid MAIL
</message>
</field-validator>
</field>
</validators>
Struts内建验证程序(type的值)
required
保证字段的值不是空值null.空字符串不是空值null.
<field name="userName">
<field-validator type="required">
<message>Please enter a user name</message>
</field-validator>
</field>
requiredstring
保证字段不是空值null,也不是空白(empty).
param:trim(boolean) ->true->去除前后空格
<field name="userName">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>Please enter a user name</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">false</param>
<message>Please enter a password</message>
</field-validator>
</field>
int
验证字段值是否可以转换为一个整数.
param: min(int);max(int)
<field name="yeaar">
<field-validator type="int">
<param name="min">1999</param>
<param name="max">2010</param>
<message>year:1999-2010</message>
</field-validator>
</field>
date
验证给定日期字段的值是否在一个给定的范围内.
param:max(date);min(date)
<field name="borthday">
<field-validator type="int">
<!-- 格式取决于当前地理时区 -->
<param name="min">1999-01-01</param>
<param name="max">2010-01-01</param>
<message>birthday:1999-2010</message>
</field-validator>
</field>
给定的String值是否是一个电子邮件地址
<field name="email">
<field-validator type="email">
<message>Invalid email</message>
</field-validator>
</field>
url
给定的String值是否是一个合法的URL(要有前缀)
<field name="url">
<field-validator type="url">
<message>Invalid URL</message>
</field-validator>
</field>
expression,fieldexpression
验证给定字段是否满足一个OGNL表达式.
区别:expression 不是一个字段验证程序,失败时将生成一个动作错误.(JSP中调用
<actionerror>
</actionerror>
才显示出错信息)
fieldexpression 是一个字段验证程序,失败时将抛出一个字段错误.(对字段验证)
param:expression(String)OGNL表达式
expression:
public class ExpressionTestAction {
//属性生成get,set
private int min;
private int max;
}
<validator type="expression">
<param name="expression">
max > min
</param>
<message>
Maximum temperature must be greater than Minimum temperature
</message>
</validator>
<!-- jsp -->
<s:actionerror/>
fieldexpression:
public class FieldExpressionTestAction {
//属性生成get,set
private int min;
private int max;
}
<!-- 对字段验证 -->
<field name="max">
<field-validator type="fieldexpression">
<param name="expression">
max > min
</param>
<message>
Maximum temperature must be greater than Minimum temperature
</message>
</field-validator>
</field>
visitor
把同一个验证程序配置文件用于多个动作(对一个Bean写验证文件,每个使用的Action只要引用)
//UserBean
public class UserBean {
//属性get,set
private String name;
private int age;
}
//UserBean-validation.xml(和UserBean放在同一个包中)
<field name="name">
<field-validator type="requiredstring">
<message>用户名必须</message>
</field-validator>
</field>
<field name="age">
<field-validator type="int">
<param name="min">18</param>
<param name="max">99</param>
<message>Age must be between 18 and 99</message>
</field-validator>
</field>
//Action的validation.xml
<!-- userBean变量名 -->
<field name="userBean">
<field-validator type="visitor">
<!-- message会和UserBean验证中的message一起显示 -->
<message>用户: </message>
</field-validator>
</field>
如果另一个Action对UserBean使用另一个标准的验证,可以创建新的验证文件
//UserBean-specific-validation.xml
<!-- 和之前的验证不同 -->
<field name="age">
<field-validator type="int">
<param name="min">30</param>
<param name="max">50</param>
<message>Age must be between 30 and 50</message>
</field-validator>
</field>
//另一个Action的validation.xml
<field name="userBean">
<field-validator type="visitor">
<!-- xml中扩展的名字,执行UserBean-specific-validation.xml的验证 -->
<param name="context">specific</param>
<message>用户1: </message>
</field-validator>
</field>
conversion
检查对某个属性进行类型转换是否会导致一个转换错误
<field name="age">
<field-validator type="conversion">
<message>
An age must be an integer.
</message>
</field-validator>
</field>
stringlength
验证一个非空的字段值是不是足够的长度
param:minLength(int);maxLength(int);trim(boolean)
<field name="password">
<field-validator type="requiredstring">
<param name="minLength">6</param>
<param name="maxLength">14</param>
<message>length:6-14</message>
</field-validator>
</field>
regex
给定的值是否与一个给定的正则表达式匹配
param:expression(String)正则表达式;caseSensitive(boolean)是否区别大小写,默认为true;trim(boolean)是否去除前后空格
<field name="phone">
<field-validator type="regex">
<param name="expression">
<![CDATA[\d\d\d\-\d\d\d\-\d\d\d\d]]>
</param>
<message>
Invalid phone number or invalid format
</message>
</field-validator>
</field>
3.在action中验证
利用Validateable接口实现验证,实现void validate()方法.
ActionSupport类已经实现了这个接口
//继承ActionSupport
public class User extends ActionSupport {
//属性get,set
private String userName;
private String password;
private static List<String> userNames = new ArrayList<String>();
static {
userNames.add("harry");
userNames.add("sally");
}
//验证方法
public void validate() {
if (userNames.contains(userName)) {
//添加出错信息
addFieldError("userName", "'" + userName + "' has been taken.");
}
}
}
4.自定义验证类
要创建一个普通的验证程序(非字段验证程序),扩展ValidatorSupport类.验证失败要从validate方法调用addActionError方法.
要创建一个字段验证程序,扩展FieldValidatorSupport类.验证失败要从validate方法调用addFieldError方法.
如果要能接受参数,要在类中定义一个相应的属性,并生成get,set.
编写类
public class StrongPasswordValidator extends FieldValidatorSupport {
//属性
private int minLength = -1;
public void setMinLength(int minLength) {
this.minLength = minLength;
}
public int getMinLength() {
return minLength;
}
//验证方法
public void validate(Object object) throws ValidationException {
String fieldName = getFieldName();
String value = (String) getFieldValue(fieldName, object);
if (value == null || value.length() <= 0) {
// use a required validator for these
return;
}
if ((minLength > -1) && (value.length() < minLength)) {
addFieldError(fieldName, object);
} else if (!isPasswordStrong(value)) {
addFieldError(fieldName, object);
}
}
private static final String GROUP_1 = "abcdefghijklmnopqrstuvwxyz";
private static final String GROUP_2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String GROUP_3 = "0123456789";
protected boolean isPasswordStrong(String password) {
boolean ok1 = false;
boolean ok2 = false;
boolean ok3 = false;
int length = password.length();
for (int i = 0; i < length; i++) {
if (ok1 && ok2 && ok3) {
break;
}
String character = password.substring(i, i + 1);
System.out.println("character:" + character);
if (GROUP_1.contains(character)) {
ok1 = true;
continue;
}
if (GROUP_2.contains(character)) {
ok2 = true;
continue;
}
if (GROUP_3.contains(character)) {
ok3 = true;
}
}
return (ok1 && ok2 && ok3);
}
}
注册xml
在src下创建validators.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator Config 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
<!-- 名称(type对应值),类路径 -->
<validator name="strongpassword" class="com.validator.StrongPasswordValidator"/>
</validators>
使用验证
<field name="password">
<field-validator type="strongpassword">
<param name="minLength">8</param>
<message>
Password must be at least 8 characters long
and contains at least one lower case character,
one upper case character, and a digit.
</message>
</field-validator>
</field>
相关推荐
在描述中提到的"struts2 plus是方便了struts2 validator的应用",这指的是Struts2 Plus对Struts2的内置验证框架进行了优化和增强。Struts2 Validator是Struts2中用于处理用户输入数据验证的组件,它允许开发者定义一...
Struts的Validator框架是Java Web开发中用于处理用户输入验证的一种强大的工具,它与MVC架构中的控制器层紧密结合,提供了一种便捷的方式来确保用户提交的数据符合预设的业务规则。这个框架大大简化了数据验证的过程...
8. **整合Struts2**:尽管这里讨论的是Struts1的Validator-rules,但在Struts2中,验证机制已经进化为更强大的Struts2 Validation,它提供了更灵活的注解式验证和更丰富的验证选项。 总的来说,Struts的Validator-...
struts中自定义validator验证 <br>很多时候需要验证“密码”与“重复密码”是否一致,如果放在服务器端验证就浪费资源了。 如何在客户端进行验证...JS可以实现,但是struts的validator框架是否能实现呢?-见示例
Struts Validator是一个强大的验证框架,它是Apache Struts框架的一部分,用于在Java Web应用程序中实现数据输入验证。这个项目集成了验证规则,使得开发者能够轻松地确保用户提交的数据符合预期的格式和约束,从而...
2. **Validator Rule Files**:包含验证规则的XML文件,定义了各个字段的验证逻辑。 3. **Validation DTD/Schema**:定义了验证规则文件的结构和元素,帮助我们正确地编写XML配置。 4. **Validation Stack**:处理...
Struts Validator是一个强大的验证框架,它是Apache Struts项目的一部分,用于在Java Web应用程序中执行客户端和服务器端的数据验证。这个“一个validator的验证程序.rar_struts_validator”压缩包包含了一个作者自...
相比于Struts内置的ActionForm Bean验证方式,Struts Validator提供了更灵活、更强大的验证功能,能够处理复杂的验证逻辑,并且可以与Spring和Hibernate等其他框架无缝集成,形成完整的Struts2 + Spring + Hibernate...
2. 验证过程:当用户提交表单时,Struts会自动调用Validator框架对ActionForm中的数据进行验证。如果验证失败,错误信息会被添加到ActionForm的fieldErrors集合中,然后可以在JSP页面上显示出来。 四、自定义验证器...
### Struts1的Validator验证框架详解 在Java Web开发领域,Struts1作为一个经典且流行的MVC框架,提供了丰富的功能来构建动态Web应用。其中,Validator框架是Struts1用于客户端和服务端表单验证的强大工具,它能...
Validator是Struts框架中的一个关键组件,用于处理用户输入验证,确保数据的有效性和一致性。在Struts1.3中,Validator功能得到了进一步的增强和优化,相比Struts1.2,它引入了一些新的特性和改进。 在Struts1.3中...
自定义验证器需要实现`org.apache.struts2.validator.FieldValidator`接口,重写`validate()`方法。然后在`validation.xml`中指定自定义验证器类型。 例如,创建一个检查邮箱格式的自定义验证器: ```java public ...
Validator框架是Struts1.x的一个重要组成部分,主要用于处理客户端和服务器端的数据验证。在这个入门例子中,我们将深入理解Validator框架的基本概念、配置以及如何在实际项目中应用。 一、Validator框架简介 ...
Struts是Java Web开发中的一款经典MVC框架,它的Validator组件是用于表单验证的核心工具。Validator验证在Struts应用程序中扮演着至关重要的角色,它能够确保用户输入的数据符合预设的规则,从而提高应用的健壮性和...
Struts2提供了内置的验证框架Struts2 Validator,帮助开发者实现这一功能。 在Struts2中进行输入校验,主要涉及以下几个步骤: 1. **配置Action**:首先,你需要在Struts2的配置文件中定义Action,并指定一个`...
Struts Validator 是 Apache Struts 框架的一个重要组成部分,它提供了一种方便的方式来验证用户输入数据的有效性。Struts 通过插件(Plugin)机制来集成 Validator 功能,使得开发者可以轻松地在应用中添加数据验证...
- Struts2可以与Spring框架无缝集成,此时Validator框架同样适用,Spring的`@Valid`注解可以与Struts2的验证框架一起工作。 7. **.classpath和.project文件** - `.classpath`是Eclipse项目中的配置文件,记录了...
Struts 1.1 Validator 校验实例 完全代码, 直接工程 导入 <br>参考 Struts in action 上面修改!!!
这个“03_张孝祥09年Struts视频_validator单元3.rar”压缩包可能包含了张孝祥老师2009年讲解Struts框架中关于Validator验证器的系列教学视频。Validator是Struts框架的一部分,主要负责处理用户输入数据的验证。 在...
struts中的validator验证demo 其中包括actionform的,动态actionform,还有js提示。 其中这部分内容博客中也有讲解,博客提示:http://blog.csdn.net/llhhyy1989/article/details/8590345