Struts2的内建验证器
内建验证器
struts2为我们共内置了16个验证器,且全部是基于字段的验证器。
required validator
功能
用来验证某个给定的字段的值不是null。注意,空字符串不是null。
参数
参数名 |
类型 |
默认值 |
必须的 |
描述 |
fieldName |
String |
|
no |
要验证的字段名 |
(用法见后面的说明)
示例
页面:
<s:fielderror/>
<s:form action="validate">
<s:textfield name="userName" label="用户名"></s:textfield>
<s:submit value="登录"></s:submit>
</s:form>
动作类:
import com.opensymphony.xwork2.ActionSupport;
public class ValidationAction extends ActionSupport {
private static final long serialVersionUID = 6877330242746547448L;
private String userName;
private String password;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
验证配置文件:
<validators>
<field name="password">
<field-validator type="required">
<message>The password field is required!</message>
</field-validator>
</field>
</validators>
运行结果:
说明
验证配置文件的另外一种写法:
<validators>
<validator type="required">
<param name="fieldName">password</param>
<message>The password field is required!</message>
</validator>
</validators>
requiredstring validator
功能
验证给定的字段的值既不是null、也不是空白。
参数
参数名 |
类型 |
默认值 |
必须的 |
描述 |
fieldName |
String |
|
no |
要验证的字段名 |
trim |
Boolean |
true |
no |
验证前是否要去掉前导和尾缀的空白字符 |
示例
页面:
<s:form action="validate">
<s:textfield name="userName" label="用户名" required="true" requiredposition="left"></s:textfield>
<s:password name="password" label="密码" required="true" requiredposition="left"></s:password>
<s:submit value="登录"></s:submit>
</s:form>
动作类:
import com.opensymphony.xwork2.ActionSupport;
public class ValidationAction extends ActionSupport {
private static final long serialVersionUID = 6877330242746547448L;
private String userName;
private String password;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
验证配置文件:
<validators>
<field name="userName">
<field-validator type="requiredstring">
<message>Please input the userName!</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">false</param>
<message>Please input the password!</message>
</field-validator>
</field>
</validators>
运行结果:
说明
验证配置文件的另外一种写法:
<validators>
<validator type="requiredstring">
<param name="fieldName">userName</param>
<message>Please input the userName!</message>
</validator>
<validator type="requiredstring">
<param name="fieldName">password</param>
<param name="trim">false</param>
<message>Please input the password!</message>
</validator>
</validators>
int validator
功能
用来验证某个字段的值是否可以被转换为一个整数。若指定参数,还验证是否在允许的范围内。
参数
参数名 |
类型 |
默认值 |
描述 |
fieldName |
String |
|
要验证的字段名 |
min |
Integer |
|
允许的最小值。若没有给出该参数则无限制 |
max |
Integer |
|
允许的最大值。若没有给出该参数则无限制 |
示例
页面:
<s:form action="validate">
<s:textfield name="age" label="年龄"></s:textfield>
<s:submit value="登录"></s:submit>
</s:form>
动作类:
private Integer age;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
验证配置文件:
<validators>
<field name="age">
<field-validator type="int">
<param name="min">18</param>
<param name="max">60</param>
<message>The age must be between ${min} and ${max}</message>
</field-validator>
</field>
</validators>
运行结果:
说明
验证配置文件的另外一种写法:
<validators>
<validator type="int">
<param name="fieldName">age</param>
<param name="min">18</param>
<param name="max">60</param>
<message>The age must be between ${min} and ${max}</message>
</validator>
</validators>
long validator
功能
用来验证某个字段的值是否可以被转换为一个长整数。若指定参数,还验证是否在允许的范围内。
参数
参数名 |
类型 |
默认值 |
描述 |
fieldName |
String |
|
要验证的字段名 |
min |
Long |
|
允许的最小值。若没有给出该参数则无限制 |
max |
Long |
|
允许的最大值。若没有给出该参数则无限制 |
示例
页面:
动作类:
验证配置文件:
运行结果:
说明
short validator
功能
用来验证某个字段的值是否可以被转换为一个短整数。若指定参数,还验证是否在允许的范围内。
参数
参数名 |
类型 |
默认值 |
描述 |
fieldName |
String |
|
要验证的字段名 |
min |
Short |
|
允许的最小值。若没有给出该参数则无限制 |
max |
Short |
|
允许的最大值。若没有给出该参数则无限制 |
示例
页面:
动作类:
验证配置文件:
运行结果:
说明
double validator
功能
用来验证某个字段的值是否可以被转换为一个双精度浮点数。若指定参数,还验证是否在允许的范围内。
参数
参数名 |
类型 |
默认值 |
描述 |
fieldName |
String |
|
要验证的字段名 |
minInclusive |
Double |
|
允许的最小值。若没有给出该参数则无限制(含最小值) |
maxInclusive |
Double |
|
允许的最大值。若没有给出该参数则无限制(含最大值) |
minExclusive |
Double |
|
允许的最小值。若没有给出该参数则无限制(不含最小值) |
maxExclusive |
Double |
|
允许的最大值。若没有给出该参数则无限制(不含最大值) |
示例
页面:
<s:form action="validate">
<s:textfield name="percentage1" label="百分比1"></s:textfield>
<s:textfield name="percentage2" label="百分比2"></s:textfield>
<s:submit value="保存"></s:submit>
</s:form>
动作类:
private Double percentage1;
private Double percentage2;
public Double getPercentage1() {
return percentage1;
}
public void setPercentage1(Double percentage1) {
this.percentage1 = percentage1;
}
public Double getPercentage2() {
return percentage2;
}
public void setPercentage2(Double percentage2) {
this.percentage2 = percentage2;
}
验证配置文件:
<validators>
<field name="percentage1">
<field-validator type="double">
<param name="minInclusive">20.1</param>
<param name="maxInclusive">50.1</param>
<message> The age must be between ${ minInclusive } and ${ maxInclusive }(含)</message>
</field-validator>
</field>
<field name="percentage2">
<field-validator type="double">
<param name="minExclusive">0.345</param>
<param name="maxExclusive">99.987</param>
<message> The age must be between ${ minExclusive } and ${ maxExclusive }(不含)</message>
</field-validator>
</field>
</validators>
运行结果:
说明
验证配置文件的另外一种写法:
<validators>
<validator type="double">
<param name="fieldName">percentage1</param>
<param name="minInclusive">20.1</param>
<param name="maxInclusive">50.1</param>
<message> The age must be between ${ minInclusive } and ${ maxInclusive }(含)</message>
</validator>
<validator type="double">
<param name="fieldName">percentage2</param>
<param name="minExclusive">0.345</param>
<param name="maxExclusive">99.987</param>
<message> The age must be between ${ minExclusive } and ${ maxExclusive }(不含)</message>
</validator>
</validators>
date validator
功能
用来确保给定的日期字段的值落在一个给定的范围内。
参数
参数名 |
类型 |
默认值 |
描述 |
fieldName |
String |
|
要验证的字段名 |
min |
java.util.Date |
|
允许的最小值。若没有给出该参数则无限制(含最小值) |
max |
java.util.Date |
|
允许的最大值。若没有给出该参数则无限制(含最大值) |
示例
页面:
<s:form action="validate">
<s:textfield name="birthday" label="出生日期"></s:textfield>
<s:submit value="保存"></s:submit>
</s:form>
动作类:
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
验证配置文件:
<validators>
<field name="birthday">
<field-validator type="date">
<param name="min">2011-01-01</param>
<param name="max">2011-12-31</param>
<message>日期必须为2011年</message>
</field-validator>
</field>
</validators>
运行结果:
说明
验证配置文件的另外一种写法:
<validators>
<validator type="date">
<param name="fieldName">birthday</param>
<param name="min">2011-01-01</param>
<param name="max">2011-12-31</param>
<message>日期必须为2011年</message>
</validator>
</validators>
expression validator
功能
用于验证是否满足一个OGNL表达式。这是一个非字段的验证。只有给定的参数的返回值是true时才能验证通过。验证不通过时产生一个动作错误,因此要显示该错误,需要使用<s:actionerror/>标签。
参数
参数名 |
类型 |
默认值 |
描述 |
expression |
String |
|
OGNL表达式,只有该表达式为true才能验证通过 |
示例
页面:
<s:actionerror/>
<s:form action="validate">
<s:textfield name="minNumber" label="最小值"></s:textfield>
<s:textfield name="maxNumber" label="最大值"></s:textfield>
<s:submit value="保存"></s:submit>
</s:form>
动作类:
private Integer minNumber;
private Integer maxNumber;
public Integer getMinNumber() {
return minNumber;
}
public void setMinNumber(Integer minNumber) {
this.minNumber = minNumber;
}
public Integer getMaxNumber() {
return maxNumber;
}
public void setMaxNumber(Integer maxNumber) {
this.maxNumber = maxNumber;
}
验证配置文件:
<validators>
<validator type="expression">
<param name="expression">
maxNumber>minNumber
</param>
<message>最大值必须大于最小值</message>
</validator>
</validators>
运行结果:
说明
该验证器没有字段形式的写法。要进行字段验证,请使用fieldexpression验证器。
fieldexpression validator
功能
用于验证某个字段是否满足一个OGNL表达式。这是一个基于字段的验证。只有给定的参数的返回值是true时才能验证通过。验证不通过时产生一个字段错误。
参数
参数名 |
类型 |
默认值 |
描述 |
fieldName |
String |
|
要验证的字段名 |
expression |
String |
|
OGNL表达式,只有该表达式为true才能验证通过 |
示例
页面:
<s:form action="validate">
<s:textfield name="minNumber" label="最小值"></s:textfield>
<s:textfield name="maxNumber" label="最大值"></s:textfield>
<s:submit value="保存"></s:submit>
</s:form>
动作类:
private Integer minNumber;
private Integer maxNumber;
public Integer getMinNumber() {
return minNumber;
}
public void setMinNumber(Integer minNumber) {
this.minNumber = minNumber;
}
public Integer getMaxNumber() {
return maxNumber;
}
public void setMaxNumber(Integer maxNumber) {
this.maxNumber = maxNumber;
}
验证配置文件:
<validators>
<field name="maxNumber">
<field-validator type="fieldexpression">
<param name="expression">
maxNumber>100
</param>
<message>最大值必须大于最小值1</message>
</field-validator>
</field>
</validators>
运行结果:
说明
验证配置文件的另外一种写法:
<validators>
<validator type="fieldexpression">
<param name="fieldName">maxNumber</param>
<param name="expression">
maxNumber>minNumber
</param>
<message>最大值必须大于最小值</message>
</validator>
</validators>
email validator
功能
用来验证给定的字段是否符合一个Email的规范。它的正则表达式为
\\b(^[_A-Za-z0-9-](\\.[_A-Za-z0-9-])*@([A-Za-z0-9-])+((\\.com)|(\\.net)|(\\.org)|(\\.info)|(\\.edu)|(\\.mil)|(\\.gov)|(\\.biz)|(\\.ws)|(\\.us)|(\\.tv)|(\\.cc)|(\\.aero)|(\\.arpa)|(\\.coop)|(\\.int)|(\\.jobs)|(\\.museum)|(\\.name)|(\\.pro)|(\\.travel)|(\\.nato)|(\\..{2,3})|(\\..{2,3}\\..{2,3}))$)\\b
参数
参数名 |
类型 |
默认值 |
描述 |
fieldName |
String |
|
要验证的字段名 |
示例
页面:
<s:form action="validate">
<s:textfield name="email" label="邮箱"></s:textfield>
<s:submit value="保存"></s:submit>
</s:form>
动作类:
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
验证配置文件:
<validators>
<field name="email">
<field-validator type="email">
<message>请输入正确的邮箱</message>
</field-validator>
</field>
</validators>
运行结果:
说明
验证配置文件的另外一种写法:
<validators>
<validator type="email">
<param name="fieldName">email</param>
<message>请输入正确的邮箱</message>
</validator>
</validators>
url validator
功能
用来验证给定的字段值是否是一个合法的URL地址。
参数
参数名 |
类型 |
默认值 |
描述 |
fieldName |
String |
|
要验证的字段名 |
示例
页面:
<s:form action="validate">
<s:textfield name="url" label="个人主页"></s:textfield>
<s:submit value="保存"></s:submit>
</s:form>
动作类:
private String url;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
验证配置文件:
<validators>
<field name="url">
<field-validator type="url">
<message>请输入正确的地址</message>
</field-validator>
</field>
</validators>
运行结果:
说明
验证配置文件的另外一种写法:
<validators>
<validator type="url">
<param name="fieldName">url</param>
<message>请输入正确的地址</message>
</validator>
</validators>
visitor validator
功能
该验证程序可以提高代码的可重用性,你可以利用它把同一个验证程序配置文件用于多个动作。
参数
示例
页面:
<s:form action="customer_save">
<s:textfield name="address.streetName" label="街道"></s:textfield>
<s:submit></s:submit>
</s:form>
动作类:
public class Customer extends ActionSupport {
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
public class Address {
private String streetName;
public String getStreetName() {
return streetName;
}
public void setStreetName(String streetName) {
this.streetName = streetName;
}
}
验证配置文件:
Address-validation.xml
<validators>
<field name="streetName">
<field-validator type="requiredstring">
<message>请输入正确街道地址</message>
</field-validator>
</field>
</validators>
Customer-validation.xml
<validators>
<field name="address">
<field-validator type="visitor">
<message>Address:</message>
</field-validator>
</field>
</validators>
运行结果:
说明
conversion validator
功能
参数
示例
页面:
动作类:
验证配置文件:
运行结果:
说明
stringlength validator
功能
用来验证一个非空的字段值是不是有足够的长度。
参数
示例
页面:
动作类:
验证配置文件:
运行结果:
说明
regex validator
功能
用来检查给定字段是否与给定的正则表达式相匹配。正则表达式的详细内容可以参考JDK的java.util.regex.Pattern类。
参数
参数名 |
类型 |
默认值 |
描述 |
fieldname |
String |
|
要验证的字段名 |
expression |
String |
|
正则表达式。此参数是必须的 |
caseSensitive |
Boolean |
true |
是否区分大小写的情况 |
trim |
Boolean |
true |
验证前是否要去掉前导和尾缀的空白字符 |
示例
页面:
<s:form action="validate">
<s:textfield name="userName" label="用户名"></s:textfield>
<s:submit value="保存"></s:submit>
</s:form>
动作类:
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
验证配置文件:
<validators>
<field name="userName">
<field-validator type="regex">
<param name="expression"><![CDATA[([aAbBcCdD][123][eEfFgG][456])]]></param>
<message> 用户名必须符合规范</message>
</field-validator>
</field>
</validators>
运行结果:
说明
验证配置文件的另外一种写法:
<validators>
<validator type="regex">
<param name="fieldName">userName</param>
<param name="expression"><![CDATA[([aAbBcCdD][123][eEfFgG][456])]]></param>
<message> 用户名必须符合规范</message>
</validator>
</validators>
conditionalvisitor
功能
参数
示例
页面:
动作类:
验证配置文件:
运行结果:
说明
常记溪亭日暮,沉醉不知归路。兴尽晚回舟,误入藕花深处。争渡,争渡,惊起一滩鸥鹭。
昨夜雨疏风骤,浓睡不消残酒。试问卷帘人,却道海棠依旧。知否?知否?应是绿肥红瘦。