- 浏览: 140988 次
- 性别:
- 来自: 未来
-
文章分类
- 全部博客 (174)
- Eclispe (3)
- javaScript (33)
- SVG学习 (22)
- Java (21)
- 网站 (12)
- learn English (1)
- 文档 (25)
- 常用网站收录 (11)
- struts (6)
- 常用API (1)
- html (2)
- jsp (2)
- spring (2)
- IDE (1)
- 数据结构 (1)
- JDBC (2)
- html + css (1)
- xml (3)
- 心声 (1)
- Axis2 (1)
- svg (4)
- webService (2)
- unix (2)
- c/c++ (3)
- html5 (1)
- Android (2)
- Jet标签 (1)
- oracle (2)
- 工具 (1)
- ideas (0)
- lean plan (1)
- java技术网站,信息收集综合及分类 (0)
最新评论
-
calosteward:
感谢博主对svg convert to PDF资源的分享。我也 ...
How to Convert a SVG File to PDF Format -
long316:
fhhhh
WinArchiver 2.7 -
long316:
ddddd
WinArchiver 2.7
http://terryjs.iteye.com/blog/805537
http://quicker.iteye.com/blog/1225471
五、 内建校验器
Struts 2 提供了大量的内建校验器,可以满足大部分应用校验需求。如果应用需要特别复杂的校验需求,开发者可以开发自己的校验器
1. 注册校验器
xwork-2.1.2.jar 文件 , com/opensymphony/xwork2/validator/validators 路径下有个 default.xml ,这个是 Struts 2 默认 的校验器注册文件
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">
<!-- START SNIPPET: validators-default -->
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
<!-- END SNIPPET: validators-default -->
<?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">
<!-- START SNIPPET: validators-default -->
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
<!-- END SNIPPET: validators-default -->
如果开发者开发了一个自己的校验器,则可以通过添加一个 validators.xml 文件 (放在 WEB-INF/classes 路径下) 来注册校验器。 validators.xml 内容 与 default.xml 相似。
注意: 如果 Struts 2 在 WEB-INF/classes 路径下 找到一个 validators.xml,则不会再加载系统默认的 default.xml 。因此,如果开发者提供了自己的校验器注册文件(validators.xml),一定要把 default.xml 文件里的内容全部复制到 validators.xml 中
2. 必填校验器
必填校验器名字是 required ,指定字段必须有值(非空)。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定 该参数
非字段校验器风格:
Xml代码
<validators>
<validator type="required">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">username</param>
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</validator>
</validators>
<validators>
<validator type="required">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">username</param>
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</validator>
</validators> 字段校验器风格:
Xml代码
<validators>
<field name="username">
<field-validator type="required">
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</field-validator>
</field>
</validators>
<validators>
<field name="username">
<field-validator type="required">
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</field-validator>
</field>
</validators>
3. 必填字符串校验器
必填字符串校验器名字是: requiredstring ,要求字段值必须是非空且长度大于0,即不能是""。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定 该参数
trim :是否在校验前截去前后空白,默认 true。
非字段校验器风格:
Xml代码
<validators>
<validator type="requiredstring">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">username</param>
<param name="trim">true</param>
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</validator>
</validators>
<validators>
<validator type="requiredstring">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">username</param>
<param name="trim">true</param>
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</validator>
</validators>
字段校验器风格:
Xml代码
<validators>
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</field-validator>
</field>
</validators>
<validators>
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</field-validator>
</field>
</validators>
4. 整数校验器
整数包括 int ,long 和 short ,该校验器要求字段的整数值必须在指定范围内。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定 该参数
min :指定该属性最小值,可选,如果没有指定,则不检验最小值
max :指定该属性的最大值,可选,如果没有指定,则不检验最大值。
非字段校验器风格:
Xml代码
<validators>
<validator type="int">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">age</param>
<param name="min">20</param>
<param name="max">50</param>
<!-- 指定校验失败的提示信息 -->
<message>age needs to bo between ${min} and ${max}
</message>
</validator>
</validators>
<validators>
<validator type="int">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">age</param>
<param name="min">20</param>
<param name="max">50</param>
<!-- 指定校验失败的提示信息 -->
<message>age needs to bo between ${min} and ${max}
</message>
</validator>
</validators>
字段校验器风格:
Xml代码
<validators>
<field name="age">
<field-validator type="int">
<param name="min">20</param>
<param name="max">50</param>
<!-- 指定校验失败的提示信息 -->
<message>age needs to bo between ${min} and ${max}
</message>
</field-validator>
</field>
</validators>
<validators>
<field name="age">
<field-validator type="int">
<param name="min">20</param>
<param name="max">50</param>
<!-- 指定校验失败的提示信息 -->
<message>age needs to bo between ${min} and ${max}
</message>
</field-validator>
</field>
</validators>
5. 日期校验器
日期校验器是 date ,要求字段的日期值必须在指定范围内。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定 该参数
min :指定该属性最小值,可选,如果没有指定,则不检验最小值
max :指定该属性的最大值,可选,如果没有指定,则不检验最大值。
注意: 如果系统没有指定日期转换器,则默认使用 XWorkBasicConverter 完成日期转换。默认使用 struts.properties 里指定的 Locale,或者系统默认的 Locale 的 Date.SHORT 格式来进行日期转换
非字段校验器风格:
Xml代码
<validators>
<validator type="date">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">birth</param>
<param name="min">1990-01-01</param>
<param name="max">2010-01-01</param>
<!-- 指定校验失败的提示信息 -->
<message>Birthday must to bo between ${min} and ${max}</message>
</validator>
</validators>
<validators>
<validator type="date">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">birth</param>
<param name="min">1990-01-01</param>
<param name="max">2010-01-01</param>
<!-- 指定校验失败的提示信息 -->
<message>Birthday must to bo between ${min} and ${max}</message>
</validator>
</validators>
字段校验器风格:
Xml代码
<validators>
<field name="birth">
<field-validator type="date">
<param name="min">1990-01-01</param>
<param name="max">2010-01-01</param>
<!-- 指定校验失败的提示信息 -->
<message>Birthday must to bo between ${min} and ${max}</message>
</field-validator>
</field>
</validators>
<validators>
<field name="birth">
<field-validator type="date">
<param name="min">1990-01-01</param>
<param name="max">2010-01-01</param>
<!-- 指定校验失败的提示信息 -->
<message>Birthday must to bo between ${min} and ${max}</message>
</field-validator>
</field>
</validators>
6. 表达式校验器
名字 expression ,它是个非字段校验器,即不可用在字段校验器风格的配置中。 该表达式校验器要求 OGNL 表达式返回 true,当返回 true 时,该校验通过;否则,就算校验没通过
参数:
expression : 该参数指定一个逻辑表达式,该逻辑表达式基于 ValueStack
进行求职,最后返回一个 boolean 值;当返回 true 时 通过,
否则校验失败
非字段校验器风格:
Xml代码
<validators>
<validator type="expression">
<!-- 指定校验表达式 -->
<param name="expression">....</param>
<!-- 指定校验失败的提示信息 -->
<message>Failed to meet Ognl Expression ....</message>
</validator>
</validators>
<validators>
<validator type="expression">
<!-- 指定校验表达式 -->
<param name="expression">....</param>
<!-- 指定校验失败的提示信息 -->
<message>Failed to meet Ognl Expression ....</message>
</validator>
</validators>
7. 字段表达式校验器
名字是 fieldexpression , 它要求指定字段满足一个逻辑表达式。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
expression : 该参数指定一个逻辑表达式,该逻辑表达式基于 ValueStack
进行求职,最后返回一个 boolean 值;当返回 true 时 通过,
否则校验失败
非字段校验器风格:
Xml代码
<validators>
<validator type="fieldexpression">
<param name="fieldName">pass</param>
<param name="expression"><![CDATA[(pass == rpass) ]]></param>
<!-- 指定校验失败的提示信息 -->
<message>密码必须和确认密码相等</message>
</validator>
</validators>
<validators>
<validator type="fieldexpression">
<param name="fieldName">pass</param>
<param name="expression"><![CDATA[(pass == rpass) ]]></param>
<!-- 指定校验失败的提示信息 -->
<message>密码必须和确认密码相等</message>
</validator>
</validators>
字段校验器风格:
Xml代码
<validators>
<field name="pass">
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[(pass == rpass) ]]></param>
<message>密码必须和确认密码相等</message>
</field-validator>
</field>
</validators>
<validators>
<field name="pass">
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[(pass == rpass) ]]></param>
<message>密码必须和确认密码相等</message>
</field-validator>
</field>
</validators>
8. 邮件地址校验器
名字是 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 : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
非字段校验器风格:
Xml代码
<validators>
<validator type="email">
<param name="fieldName">email</param>
<!-- 指定校验失败的提示信息 -->
<message>邮件必须有效地址</message>
</validator>
</validators>
<validators>
<validator type="email">
<param name="fieldName">email</param>
<!-- 指定校验失败的提示信息 -->
<message>邮件必须有效地址</message>
</validator>
</validators>
字段校验器风格:
Xml代码
<validators>
<field name="email">
<field-validator type="email">
<message>邮件必须有效地址</message>
</field-validator>
</field>
</validators>
<validators>
<field name="email">
<field-validator type="email">
<message>邮件必须有效地址</message>
</field-validator>
</field>
</validators>
9. 网址校验器
名称是 url , 它要求被检查字段的字符如果非空,则必须是合法的 URL 地址。这个也是基于正则表达式进行校验的。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
非字段校验器风格:
Xml代码
<validators>
<validator type="url">
<param name="fieldName">url</param>
<!-- 指定校验失败的提示信息 -->
<message>您的主页地址必须是有效的网址</message>
</validator>
</validators>
<validators>
<validator type="url">
<param name="fieldName">url</param>
<!-- 指定校验失败的提示信息 -->
<message>您的主页地址必须是有效的网址</message>
</validator>
</validators> 字段校验器风格:
Xml代码
<validators>
<field name="url">
<field-validator type="url">
<message>您的主页地址必须是有效的网址</message>
</field-validator>
</field>
</validators>
<validators>
<field name="url">
<field-validator type="url">
<message>您的主页地址必须是有效的网址</message>
</field-validator>
</field>
</validators>
10. Visitor 校验器
Visitor 校验器主要用于校验 Action 里的复合属性 ,例如:一个 Action 里包含了 User 类型的属性。
假设有下面的 Action 类:
Java代码
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;
import java.util.regex.*;
import java.text.*;
public class RegistAction extends ActionSupport
{
//Action里包含了一个User类型的参数
private User user;
//user属性的setter和getter方法
public void setUser(User user)
{
this.user = user;
}
public User getUser()
{
return (this.user);
}
}
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;
import java.util.regex.*;
import java.text.*;
public class RegistAction extends ActionSupport
{
//Action里包含了一个User类型的参数
private User user;
//user属性的setter和getter方法
public void setUser(User user)
{
this.user = user;
}
public User getUser()
{
return (this.user);
}
}
这种方式非常类似于前面介绍的驱动模型,即 User 类是一个最普通的 java 类,仅仅提供 4 个属性。
User 类
Java代码
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;
import java.util.regex.*;
import java.text.*;
public class User
{
private String name;
private String pass;
private int age;
private Date birth;
public void setName(String name)
{
this.name = name;
}
public void setPass(String pass)
{
this.pass = pass;
}
public void setAge(int age)
{
this.age = age;
}
public void setBirth(Date birth)
{
this.birth = birth;
}
public String getName()
{
return (this.name);
}
public String getPass()
{
return (this.pass);
}
public int getAge() {
return (this.age);
}
public Date getBirth()
{
return (this.birth);
}
}
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;
import java.util.regex.*;
import java.text.*;
public class User
{
private String name;
private String pass;
private int age;
private Date birth;
public void setName(String name)
{
this.name = name;
}
public void setPass(String pass)
{
this.pass = pass;
}
public void setAge(int age)
{
this.age = age;
}
public void setBirth(Date birth)
{
this.birth = birth;
}
public String getName()
{
return (this.name);
}
public String getPass()
{
return (this.pass);
}
public int getAge() {
return (this.age);
}
public Date getBirth()
{
return (this.birth);
}
}
为了 校验上面 RegistAction 的 User 属性 ,显然不能通过其他校验器完成,因为那些普通校验器都只能校验基本数据类型和字符串类型。此时,为了校验该 User 类型属性里的其他属性,则应该使用 Vistior 校验器
RegistAction-validation.xml
Xml代码
<?xml version="1.0" encoding="GBK"?>
<!-- 指定校验规则文件的DTD信息 -->
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!-- 校验规则文件的根元素 -->
<validators>
<!-- 指定校验user字段 -->
<field name="user">
<!-- 使用visitor校验器 -->
<field-validator type="visitor">
<!-- 指定校验规则文件的context -->
<param name="context">userContext</param>
<!-- 指定校验失败后提示信息是否添加下面前缀 -->
<param name="appendPrefix">true</param>
<!-- 指定校验失败的提示信息前缀 -->
<message>用户的:</message>
</field-validator>
</field>
</validators>
<?xml version="1.0" encoding="GBK"?>
<!-- 指定校验规则文件的DTD信息 -->
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!-- 校验规则文件的根元素 -->
<validators>
<!-- 指定校验user字段 -->
<field name="user">
<!-- 使用visitor校验器 -->
<field-validator type="visitor">
<!-- 指定校验规则文件的context -->
<param name="context">userContext</param>
<!-- 指定校验失败后提示信息是否添加下面前缀 -->
<param name="appendPrefix">true</param>
<!-- 指定校验失败的提示信息前缀 -->
<message>用户的:</message>
</field-validator>
</field>
</validators> 上面并未指定 User 类里各字段的校验规则。因此,必须为 User 类指定对应校验规则文件。
注意: 如果 appendPrefix = true 则表示校验失败的 message 中 ,会加上 “用户的:” 前缀 ,否则将不会添加前缀
默认情况下 ,该校验文件的规则文件名为 User-validation.xml ,因为配置了 Visitor 校验器时指定了 context 为 userContext,则该校验文件的文件名为 User-userContext-validation.xml。
User-userContext-validation.xml
Xml代码
<?xml version="1.0" encoding="GBK"?>
<!-- 指定校验配置文件的DTD信息 -->
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!-- 校验文件的根元素 -->
<validators>
<!-- 校验User属性的name属性 -->
<field name="name">
<!-- 指定name属性必须满足必填规则 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<!-- 如果校验失败,输出name.requried对应的国际化信息 -->
<message key="name.requried"/>
</field-validator>
<!-- 指定name属性必须匹配正则表达式 -->
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<!-- 如果校验失败,输出name.regex对应的国际化信息 -->
<message key="name.regex"/>
</field-validator>
</field>
<!-- 校验User属性的pass属性 -->
<field name="pass">
<!-- 指定pass属性必须满足必填规则 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<!-- 如果校验失败,输出pass.requried对应的国际化信息 -->
<message key="pass.requried"/>
</field-validator>
<!-- 指定pass属性必须满足匹配指定的正则表达式 -->
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<!-- 如果校验失败,输出pass.regex对应的国际化信息 -->
<message key="pass.regex"/>
</field-validator>
</field>
<!-- 指定User属性的age属性必须在指定范围内-->
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<!-- 如果校验失败,输出age.range对应的国际化信息 -->
<message key="age.range"/>
</field-validator>
</field>
<!-- 指定User属性的birth属性必须在指定范围内-->
<field name="birth">
<field-validator type="date">
<!-- 下面指定日期字符串时,必须使用本Locale的日期格式 -->
<param name="min">1900-01-01</param>
<param name="max">2050-02-21</param>
<!-- 如果校验失败,输出birth.range对应的国际化信息 -->
<message key="birth.range"/>
</field-validator>
</field>
</validators>
<?xml version="1.0" encoding="GBK"?>
<!-- 指定校验配置文件的DTD信息 -->
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!-- 校验文件的根元素 -->
<validators>
<!-- 校验User属性的name属性 -->
<field name="name">
<!-- 指定name属性必须满足必填规则 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<!-- 如果校验失败,输出name.requried对应的国际化信息 -->
<message key="name.requried"/>
</field-validator>
<!-- 指定name属性必须匹配正则表达式 -->
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<!-- 如果校验失败,输出name.regex对应的国际化信息 -->
<message key="name.regex"/>
</field-validator>
</field>
<!-- 校验User属性的pass属性 -->
<field name="pass">
<!-- 指定pass属性必须满足必填规则 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<!-- 如果校验失败,输出pass.requried对应的国际化信息 -->
<message key="pass.requried"/>
</field-validator>
<!-- 指定pass属性必须满足匹配指定的正则表达式 -->
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<!-- 如果校验失败,输出pass.regex对应的国际化信息 -->
<message key="pass.regex"/>
</field-validator>
</field>
<!-- 指定User属性的age属性必须在指定范围内-->
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<!-- 如果校验失败,输出age.range对应的国际化信息 -->
<message key="age.range"/>
</field-validator>
</field>
<!-- 指定User属性的birth属性必须在指定范围内-->
<field name="birth">
<field-validator type="date">
<!-- 下面指定日期字符串时,必须使用本Locale的日期格式 -->
<param name="min">1900-01-01</param>
<param name="max">2050-02-21</param>
<!-- 如果校验失败,输出birth.range对应的国际化信息 -->
<message key="birth.range"/>
</field-validator>
</field>
</validators>
从上面配置文件中可以看出,这个 User-userContext-validation.xml 文件的内容与之前校验 Action 的校验文件完全相同,通过这种方式就可以对 Action 里复合类型的属性进行校验了。
因为 Action 里的属性不再是基本数据类型,而是 User 类型的属性,则将 JSP 页面进行简单的修改:
regist.jsp
Html代码
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>请输入您的注册信息</title>
<meta name="website" content="http://www.crazyit.org" />
<s:head/>
</head>
<body>
<h3>请输入您的注册信息</h3>
<!-- 使用Struts 2标签库生成表单 -->
<s:form action="regist">
<!-- 使用s:textfield标签生成文本输入框 -->
<s:textfield label="用户名" name="user.name"/>
<s:password label="密码" name="user.pass"/>
<s:textfield label="年龄" name="user.age"/>
<s:textfield label="生日" name="user.birth"/>
<s:submit/>
</s:form>
</body>
</html>
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>请输入您的注册信息</title>
<meta name="website" content="http://www.crazyit.org" />
<s:head/>
</head>
<body>
<h3>请输入您的注册信息</h3>
<!-- 使用Struts 2标签库生成表单 -->
<s:form action="regist">
<!-- 使用s:textfield标签生成文本输入框 -->
<s:textfield label="用户名" name="user.name"/>
<s:password label="密码" name="user.pass"/>
<s:textfield label="年龄" name="user.age"/>
<s:textfield label="生日" name="user.birth"/>
<s:submit/>
</s:form>
</body>
</html>
11. 转换校验器
名称: conversion , 它检查被校验字段在类型转换过程中是否出现错误
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
repopulateField :指定当类型转换失败后,返回 input 页面时,类型转换
失败的表单域是否保留原来的错误输入。
非字段校验器风格:
Xml代码
<validators>
<validator type="conversion">
<param name="fieldName">age</param>
<param name="repopulateField">false</param>
<!-- 指定校验失败的提示信息 -->
<message>fail</message>
</validator>
</validators>
<validators>
<validator type="conversion">
<param name="fieldName">age</param>
<param name="repopulateField">false</param>
<!-- 指定校验失败的提示信息 -->
<message>fail</message>
</validator>
</validators> 字段校验器风格:
Xml代码
<validators>
<field name="age">
<field-validator type="conversion">
<param name="repopulateField">true</param>
<message>fail</message>
</field-validator>
</field>
</validators>
<validators>
<field name="age">
<field-validator type="conversion">
<param name="repopulateField">true</param>
<message>fail</message>
</field-validator>
</field>
</validators>
12. 字符串长度校验器
名称: stringlength ,它要求被校验字段的长度必须在指定范围内,否则校验失败。
参数
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
maxLength : 指定字段的最大长度。参数可选,不指定时,
最大长度不受 限制
minLength : 指定字段的最小长度。参数可选,不指定时,
最小长度不受限制
trim : 指定校验字段之前是否截断该字段前后空白。该参数可选,默认 true
非字段校验器风格:
Xml代码
<validators>
<validator type="stringlength">
<param name="fieldName">user</param>
<param name="minLength">4</param>
<param name="maxLength">20</param>
<message>fail</message>
</validator>
</validators>
<validators>
<validator type="stringlength">
<param name="fieldName">user</param>
<param name="minLength">4</param>
<param name="maxLength">20</param>
<message>fail</message>
</validator>
</validators>
字段校验器风格:
Xml代码
<validators>
<field name="user">
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">20</param>
<message>fail</message>
</field-validator>
</field>
</validators>
<validators>
<field name="user">
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">20</param>
<message>fail</message>
</field-validator>
</field>
</validators>
13. 正则表达式校验器
名称: regex , 它检查被校验字段是否匹配一个正则表达式。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
expression :该参数是必须的,该参数指定匹配用的正则表达式
caseSensitive :该参数指明进行正则表达式匹配时,是否区分大小写。
参数可选,默认 true
非字段校验器风格:
Xml代码
<validators>
<validator type="regex">
<param name="fieldName">user</param>
<param name="expression"><![CDATA[(\w{4,20})]]></param>
<message>你的用户名长度必须在4到20之间,且必须是字母和数字</message>
</validator>
</validators>
<validators>
<validator type="regex">
<param name="fieldName">user</param>
<param name="expression"><![CDATA[(\w{4,20})]]></param>
<message>你的用户名长度必须在4到20之间,且必须是字母和数字</message>
</validator>
</validators>
字段校验器风格:
Xml代码
<validators>
<field name="user">
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,20})]]></param>
<message>你的用户名长度必须在4到20之间,且必须是字母和数字</message>
</field-validator>
</field>
</validators>
<validators>
<field name="user">
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,20})]]></param>
<message>你的用户名长度必须在4到20之间,且必须是字母和数字</message>
</field-validator>
</field>
</validators>
14. 基于 Annotation 校验器
基于 Annotation 的输入校验实际上是 Struts 2 “零配件”特性的部分,它允许使用 Annotation 来定义每个字段应该满足的规则 ,Struts 2 在 com.opensymphony.xwork2.validator.annotations 包下提供了大量验证器 Annotation ,这些 Annotation 和前面介绍的验证器大致上一一对应 ,可以自行查看 API 文档
配置
1. 使用 @Validation()Annotation 修饰 Action 类
2. 使用验证器 Annotation 修饰 Action 里各属性对应的 setter 方法 。
下面我们在前面 I18NValidate 应用的基础上进行修改,将该应用的 WEB-INF\src\lee 路径下的校验规则文件删除 ,修改该路径下的 RegistAction.java 文件,通过注释指定各属性应该满足的规则 。修改后的 Action 如下:
Java代码
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.validator.annotations.*;
import java.util.*;
import java.util.regex.*;
import java.text.*;
//使用@Validation修饰Action类
@Validation()
public class RegistAction extends ActionSupport
{
private String name;
private String pass;
private int age;
private Date birth;
//使用Annotation指定必填、正则表达式两个校验规则
@RequiredStringValidator(type = ValidatorType.FIELD,
key = "name.requried",message = "")
@RegexFieldValidator(type = ValidatorType.FIELD,
expression = "\\w{4,25}",key = "name.regex",message = "")
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return (this.name);
}
//使用Annotation指定必填、正则表达式两个校验规则
@RequiredStringValidator(type = ValidatorType.FIELD,
key = "pass.requried",message = "")
@RegexFieldValidator(type = ValidatorType.FIELD,
expression = "\\w{4,25}",key = "pass.regex",message = "")
public void setPass(String pass)
{
this.pass = pass;
}
public String getPass()
{
return (this.pass);
}
//使用Annotation指定整数范围校验规则
@IntRangeFieldValidator(message = "",
key = "age.range", min = "1", max = "150")
public void setAge(int age)
{
this.age = age;
}
public int getAge() {
return (this.age);
}
//使用Annotation指定日期范围校验规则
@DateRangeFieldValidator(message = "",
key = "birth.range", min = "1900/01/01", max = "2050/01/21")
public void setBirth(Date birth)
{
this.birth = birth;
}
public Date getBirth()
{
return (this.birth);
}
}
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.validator.annotations.*;
import java.util.*;
import java.util.regex.*;
import java.text.*;
//使用@Validation修饰Action类
@Validation()
public class RegistAction extends ActionSupport
{
private String name;
private String pass;
private int age;
private Date birth;
//使用Annotation指定必填、正则表达式两个校验规则
@RequiredStringValidator(type = ValidatorType.FIELD,
key = "name.requried",message = "")
@RegexFieldValidator(type = ValidatorType.FIELD,
expression = "\\w{4,25}",key = "name.regex",message = "")
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return (this.name);
}
//使用Annotation指定必填、正则表达式两个校验规则
@RequiredStringValidator(type = ValidatorType.FIELD,
key = "pass.requried",message = "")
@RegexFieldValidator(type = ValidatorType.FIELD,
expression = "\\w{4,25}",key = "pass.regex",message = "")
public void setPass(String pass)
{
this.pass = pass;
}
public String getPass()
{
return (this.pass);
}
//使用Annotation指定整数范围校验规则
@IntRangeFieldValidator(message = "",
key = "age.range", min = "1", max = "150")
public void setAge(int age)
{
this.age = age;
}
public int getAge() {
return (this.age);
}
//使用Annotation指定日期范围校验规则
@DateRangeFieldValidator(message = "",
key = "birth.range", min = "1900/01/01", max = "2050/01/21")
public void setBirth(Date birth)
{
this.birth = birth;
}
public Date getBirth()
{
return (this.birth);
}
}
上面代码使用了验证器 Annotation 修饰了各属性的 setter 方法 。通过在 Action 中使用 Annotation 指定各字段应该满足的校验规则,就可以避免书写 XML 校验规则文件。
但是所有内容都被写入 java 代码中,会给后期维护带来一定困难
http://quicker.iteye.com/blog/1225471
五、 内建校验器
Struts 2 提供了大量的内建校验器,可以满足大部分应用校验需求。如果应用需要特别复杂的校验需求,开发者可以开发自己的校验器
1. 注册校验器
xwork-2.1.2.jar 文件 , com/opensymphony/xwork2/validator/validators 路径下有个 default.xml ,这个是 Struts 2 默认 的校验器注册文件
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">
<!-- START SNIPPET: validators-default -->
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
<!-- END SNIPPET: validators-default -->
<?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">
<!-- START SNIPPET: validators-default -->
<validators>
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
<!-- END SNIPPET: validators-default -->
如果开发者开发了一个自己的校验器,则可以通过添加一个 validators.xml 文件 (放在 WEB-INF/classes 路径下) 来注册校验器。 validators.xml 内容 与 default.xml 相似。
注意: 如果 Struts 2 在 WEB-INF/classes 路径下 找到一个 validators.xml,则不会再加载系统默认的 default.xml 。因此,如果开发者提供了自己的校验器注册文件(validators.xml),一定要把 default.xml 文件里的内容全部复制到 validators.xml 中
2. 必填校验器
必填校验器名字是 required ,指定字段必须有值(非空)。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定 该参数
非字段校验器风格:
Xml代码
<validators>
<validator type="required">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">username</param>
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</validator>
</validators>
<validators>
<validator type="required">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">username</param>
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</validator>
</validators> 字段校验器风格:
Xml代码
<validators>
<field name="username">
<field-validator type="required">
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</field-validator>
</field>
</validators>
<validators>
<field name="username">
<field-validator type="required">
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</field-validator>
</field>
</validators>
3. 必填字符串校验器
必填字符串校验器名字是: requiredstring ,要求字段值必须是非空且长度大于0,即不能是""。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定 该参数
trim :是否在校验前截去前后空白,默认 true。
非字段校验器风格:
Xml代码
<validators>
<validator type="requiredstring">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">username</param>
<param name="trim">true</param>
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</validator>
</validators>
<validators>
<validator type="requiredstring">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">username</param>
<param name="trim">true</param>
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</validator>
</validators>
字段校验器风格:
Xml代码
<validators>
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</field-validator>
</field>
</validators>
<validators>
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<!-- 指定校验失败的提示信息 -->
<message>username must not be null</message>
</field-validator>
</field>
</validators>
4. 整数校验器
整数包括 int ,long 和 short ,该校验器要求字段的整数值必须在指定范围内。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定 该参数
min :指定该属性最小值,可选,如果没有指定,则不检验最小值
max :指定该属性的最大值,可选,如果没有指定,则不检验最大值。
非字段校验器风格:
Xml代码
<validators>
<validator type="int">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">age</param>
<param name="min">20</param>
<param name="max">50</param>
<!-- 指定校验失败的提示信息 -->
<message>age needs to bo between ${min} and ${max}
</message>
</validator>
</validators>
<validators>
<validator type="int">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">age</param>
<param name="min">20</param>
<param name="max">50</param>
<!-- 指定校验失败的提示信息 -->
<message>age needs to bo between ${min} and ${max}
</message>
</validator>
</validators>
字段校验器风格:
Xml代码
<validators>
<field name="age">
<field-validator type="int">
<param name="min">20</param>
<param name="max">50</param>
<!-- 指定校验失败的提示信息 -->
<message>age needs to bo between ${min} and ${max}
</message>
</field-validator>
</field>
</validators>
<validators>
<field name="age">
<field-validator type="int">
<param name="min">20</param>
<param name="max">50</param>
<!-- 指定校验失败的提示信息 -->
<message>age needs to bo between ${min} and ${max}
</message>
</field-validator>
</field>
</validators>
5. 日期校验器
日期校验器是 date ,要求字段的日期值必须在指定范围内。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定 该参数
min :指定该属性最小值,可选,如果没有指定,则不检验最小值
max :指定该属性的最大值,可选,如果没有指定,则不检验最大值。
注意: 如果系统没有指定日期转换器,则默认使用 XWorkBasicConverter 完成日期转换。默认使用 struts.properties 里指定的 Locale,或者系统默认的 Locale 的 Date.SHORT 格式来进行日期转换
非字段校验器风格:
Xml代码
<validators>
<validator type="date">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">birth</param>
<param name="min">1990-01-01</param>
<param name="max">2010-01-01</param>
<!-- 指定校验失败的提示信息 -->
<message>Birthday must to bo between ${min} and ${max}</message>
</validator>
</validators>
<validators>
<validator type="date">
<!-- 指定需要校验的字段名 -->
<param name="fieldName">birth</param>
<param name="min">1990-01-01</param>
<param name="max">2010-01-01</param>
<!-- 指定校验失败的提示信息 -->
<message>Birthday must to bo between ${min} and ${max}</message>
</validator>
</validators>
字段校验器风格:
Xml代码
<validators>
<field name="birth">
<field-validator type="date">
<param name="min">1990-01-01</param>
<param name="max">2010-01-01</param>
<!-- 指定校验失败的提示信息 -->
<message>Birthday must to bo between ${min} and ${max}</message>
</field-validator>
</field>
</validators>
<validators>
<field name="birth">
<field-validator type="date">
<param name="min">1990-01-01</param>
<param name="max">2010-01-01</param>
<!-- 指定校验失败的提示信息 -->
<message>Birthday must to bo between ${min} and ${max}</message>
</field-validator>
</field>
</validators>
6. 表达式校验器
名字 expression ,它是个非字段校验器,即不可用在字段校验器风格的配置中。 该表达式校验器要求 OGNL 表达式返回 true,当返回 true 时,该校验通过;否则,就算校验没通过
参数:
expression : 该参数指定一个逻辑表达式,该逻辑表达式基于 ValueStack
进行求职,最后返回一个 boolean 值;当返回 true 时 通过,
否则校验失败
非字段校验器风格:
Xml代码
<validators>
<validator type="expression">
<!-- 指定校验表达式 -->
<param name="expression">....</param>
<!-- 指定校验失败的提示信息 -->
<message>Failed to meet Ognl Expression ....</message>
</validator>
</validators>
<validators>
<validator type="expression">
<!-- 指定校验表达式 -->
<param name="expression">....</param>
<!-- 指定校验失败的提示信息 -->
<message>Failed to meet Ognl Expression ....</message>
</validator>
</validators>
7. 字段表达式校验器
名字是 fieldexpression , 它要求指定字段满足一个逻辑表达式。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
expression : 该参数指定一个逻辑表达式,该逻辑表达式基于 ValueStack
进行求职,最后返回一个 boolean 值;当返回 true 时 通过,
否则校验失败
非字段校验器风格:
Xml代码
<validators>
<validator type="fieldexpression">
<param name="fieldName">pass</param>
<param name="expression"><![CDATA[(pass == rpass) ]]></param>
<!-- 指定校验失败的提示信息 -->
<message>密码必须和确认密码相等</message>
</validator>
</validators>
<validators>
<validator type="fieldexpression">
<param name="fieldName">pass</param>
<param name="expression"><![CDATA[(pass == rpass) ]]></param>
<!-- 指定校验失败的提示信息 -->
<message>密码必须和确认密码相等</message>
</validator>
</validators>
字段校验器风格:
Xml代码
<validators>
<field name="pass">
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[(pass == rpass) ]]></param>
<message>密码必须和确认密码相等</message>
</field-validator>
</field>
</validators>
<validators>
<field name="pass">
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[(pass == rpass) ]]></param>
<message>密码必须和确认密码相等</message>
</field-validator>
</field>
</validators>
8. 邮件地址校验器
名字是 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 : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
非字段校验器风格:
Xml代码
<validators>
<validator type="email">
<param name="fieldName">email</param>
<!-- 指定校验失败的提示信息 -->
<message>邮件必须有效地址</message>
</validator>
</validators>
<validators>
<validator type="email">
<param name="fieldName">email</param>
<!-- 指定校验失败的提示信息 -->
<message>邮件必须有效地址</message>
</validator>
</validators>
字段校验器风格:
Xml代码
<validators>
<field name="email">
<field-validator type="email">
<message>邮件必须有效地址</message>
</field-validator>
</field>
</validators>
<validators>
<field name="email">
<field-validator type="email">
<message>邮件必须有效地址</message>
</field-validator>
</field>
</validators>
9. 网址校验器
名称是 url , 它要求被检查字段的字符如果非空,则必须是合法的 URL 地址。这个也是基于正则表达式进行校验的。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
非字段校验器风格:
Xml代码
<validators>
<validator type="url">
<param name="fieldName">url</param>
<!-- 指定校验失败的提示信息 -->
<message>您的主页地址必须是有效的网址</message>
</validator>
</validators>
<validators>
<validator type="url">
<param name="fieldName">url</param>
<!-- 指定校验失败的提示信息 -->
<message>您的主页地址必须是有效的网址</message>
</validator>
</validators> 字段校验器风格:
Xml代码
<validators>
<field name="url">
<field-validator type="url">
<message>您的主页地址必须是有效的网址</message>
</field-validator>
</field>
</validators>
<validators>
<field name="url">
<field-validator type="url">
<message>您的主页地址必须是有效的网址</message>
</field-validator>
</field>
</validators>
10. Visitor 校验器
Visitor 校验器主要用于校验 Action 里的复合属性 ,例如:一个 Action 里包含了 User 类型的属性。
假设有下面的 Action 类:
Java代码
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;
import java.util.regex.*;
import java.text.*;
public class RegistAction extends ActionSupport
{
//Action里包含了一个User类型的参数
private User user;
//user属性的setter和getter方法
public void setUser(User user)
{
this.user = user;
}
public User getUser()
{
return (this.user);
}
}
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;
import java.util.regex.*;
import java.text.*;
public class RegistAction extends ActionSupport
{
//Action里包含了一个User类型的参数
private User user;
//user属性的setter和getter方法
public void setUser(User user)
{
this.user = user;
}
public User getUser()
{
return (this.user);
}
}
这种方式非常类似于前面介绍的驱动模型,即 User 类是一个最普通的 java 类,仅仅提供 4 个属性。
User 类
Java代码
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;
import java.util.regex.*;
import java.text.*;
public class User
{
private String name;
private String pass;
private int age;
private Date birth;
public void setName(String name)
{
this.name = name;
}
public void setPass(String pass)
{
this.pass = pass;
}
public void setAge(int age)
{
this.age = age;
}
public void setBirth(Date birth)
{
this.birth = birth;
}
public String getName()
{
return (this.name);
}
public String getPass()
{
return (this.pass);
}
public int getAge() {
return (this.age);
}
public Date getBirth()
{
return (this.birth);
}
}
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import java.util.*;
import java.util.regex.*;
import java.text.*;
public class User
{
private String name;
private String pass;
private int age;
private Date birth;
public void setName(String name)
{
this.name = name;
}
public void setPass(String pass)
{
this.pass = pass;
}
public void setAge(int age)
{
this.age = age;
}
public void setBirth(Date birth)
{
this.birth = birth;
}
public String getName()
{
return (this.name);
}
public String getPass()
{
return (this.pass);
}
public int getAge() {
return (this.age);
}
public Date getBirth()
{
return (this.birth);
}
}
为了 校验上面 RegistAction 的 User 属性 ,显然不能通过其他校验器完成,因为那些普通校验器都只能校验基本数据类型和字符串类型。此时,为了校验该 User 类型属性里的其他属性,则应该使用 Vistior 校验器
RegistAction-validation.xml
Xml代码
<?xml version="1.0" encoding="GBK"?>
<!-- 指定校验规则文件的DTD信息 -->
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!-- 校验规则文件的根元素 -->
<validators>
<!-- 指定校验user字段 -->
<field name="user">
<!-- 使用visitor校验器 -->
<field-validator type="visitor">
<!-- 指定校验规则文件的context -->
<param name="context">userContext</param>
<!-- 指定校验失败后提示信息是否添加下面前缀 -->
<param name="appendPrefix">true</param>
<!-- 指定校验失败的提示信息前缀 -->
<message>用户的:</message>
</field-validator>
</field>
</validators>
<?xml version="1.0" encoding="GBK"?>
<!-- 指定校验规则文件的DTD信息 -->
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!-- 校验规则文件的根元素 -->
<validators>
<!-- 指定校验user字段 -->
<field name="user">
<!-- 使用visitor校验器 -->
<field-validator type="visitor">
<!-- 指定校验规则文件的context -->
<param name="context">userContext</param>
<!-- 指定校验失败后提示信息是否添加下面前缀 -->
<param name="appendPrefix">true</param>
<!-- 指定校验失败的提示信息前缀 -->
<message>用户的:</message>
</field-validator>
</field>
</validators> 上面并未指定 User 类里各字段的校验规则。因此,必须为 User 类指定对应校验规则文件。
注意: 如果 appendPrefix = true 则表示校验失败的 message 中 ,会加上 “用户的:” 前缀 ,否则将不会添加前缀
默认情况下 ,该校验文件的规则文件名为 User-validation.xml ,因为配置了 Visitor 校验器时指定了 context 为 userContext,则该校验文件的文件名为 User-userContext-validation.xml。
User-userContext-validation.xml
Xml代码
<?xml version="1.0" encoding="GBK"?>
<!-- 指定校验配置文件的DTD信息 -->
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!-- 校验文件的根元素 -->
<validators>
<!-- 校验User属性的name属性 -->
<field name="name">
<!-- 指定name属性必须满足必填规则 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<!-- 如果校验失败,输出name.requried对应的国际化信息 -->
<message key="name.requried"/>
</field-validator>
<!-- 指定name属性必须匹配正则表达式 -->
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<!-- 如果校验失败,输出name.regex对应的国际化信息 -->
<message key="name.regex"/>
</field-validator>
</field>
<!-- 校验User属性的pass属性 -->
<field name="pass">
<!-- 指定pass属性必须满足必填规则 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<!-- 如果校验失败,输出pass.requried对应的国际化信息 -->
<message key="pass.requried"/>
</field-validator>
<!-- 指定pass属性必须满足匹配指定的正则表达式 -->
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<!-- 如果校验失败,输出pass.regex对应的国际化信息 -->
<message key="pass.regex"/>
</field-validator>
</field>
<!-- 指定User属性的age属性必须在指定范围内-->
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<!-- 如果校验失败,输出age.range对应的国际化信息 -->
<message key="age.range"/>
</field-validator>
</field>
<!-- 指定User属性的birth属性必须在指定范围内-->
<field name="birth">
<field-validator type="date">
<!-- 下面指定日期字符串时,必须使用本Locale的日期格式 -->
<param name="min">1900-01-01</param>
<param name="max">2050-02-21</param>
<!-- 如果校验失败,输出birth.range对应的国际化信息 -->
<message key="birth.range"/>
</field-validator>
</field>
</validators>
<?xml version="1.0" encoding="GBK"?>
<!-- 指定校验配置文件的DTD信息 -->
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.3//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!-- 校验文件的根元素 -->
<validators>
<!-- 校验User属性的name属性 -->
<field name="name">
<!-- 指定name属性必须满足必填规则 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<!-- 如果校验失败,输出name.requried对应的国际化信息 -->
<message key="name.requried"/>
</field-validator>
<!-- 指定name属性必须匹配正则表达式 -->
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<!-- 如果校验失败,输出name.regex对应的国际化信息 -->
<message key="name.regex"/>
</field-validator>
</field>
<!-- 校验User属性的pass属性 -->
<field name="pass">
<!-- 指定pass属性必须满足必填规则 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<!-- 如果校验失败,输出pass.requried对应的国际化信息 -->
<message key="pass.requried"/>
</field-validator>
<!-- 指定pass属性必须满足匹配指定的正则表达式 -->
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<!-- 如果校验失败,输出pass.regex对应的国际化信息 -->
<message key="pass.regex"/>
</field-validator>
</field>
<!-- 指定User属性的age属性必须在指定范围内-->
<field name="age">
<field-validator type="int">
<param name="min">1</param>
<param name="max">150</param>
<!-- 如果校验失败,输出age.range对应的国际化信息 -->
<message key="age.range"/>
</field-validator>
</field>
<!-- 指定User属性的birth属性必须在指定范围内-->
<field name="birth">
<field-validator type="date">
<!-- 下面指定日期字符串时,必须使用本Locale的日期格式 -->
<param name="min">1900-01-01</param>
<param name="max">2050-02-21</param>
<!-- 如果校验失败,输出birth.range对应的国际化信息 -->
<message key="birth.range"/>
</field-validator>
</field>
</validators>
从上面配置文件中可以看出,这个 User-userContext-validation.xml 文件的内容与之前校验 Action 的校验文件完全相同,通过这种方式就可以对 Action 里复合类型的属性进行校验了。
因为 Action 里的属性不再是基本数据类型,而是 User 类型的属性,则将 JSP 页面进行简单的修改:
regist.jsp
Html代码
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>请输入您的注册信息</title>
<meta name="website" content="http://www.crazyit.org" />
<s:head/>
</head>
<body>
<h3>请输入您的注册信息</h3>
<!-- 使用Struts 2标签库生成表单 -->
<s:form action="regist">
<!-- 使用s:textfield标签生成文本输入框 -->
<s:textfield label="用户名" name="user.name"/>
<s:password label="密码" name="user.pass"/>
<s:textfield label="年龄" name="user.age"/>
<s:textfield label="生日" name="user.birth"/>
<s:submit/>
</s:form>
</body>
</html>
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>请输入您的注册信息</title>
<meta name="website" content="http://www.crazyit.org" />
<s:head/>
</head>
<body>
<h3>请输入您的注册信息</h3>
<!-- 使用Struts 2标签库生成表单 -->
<s:form action="regist">
<!-- 使用s:textfield标签生成文本输入框 -->
<s:textfield label="用户名" name="user.name"/>
<s:password label="密码" name="user.pass"/>
<s:textfield label="年龄" name="user.age"/>
<s:textfield label="生日" name="user.birth"/>
<s:submit/>
</s:form>
</body>
</html>
11. 转换校验器
名称: conversion , 它检查被校验字段在类型转换过程中是否出现错误
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
repopulateField :指定当类型转换失败后,返回 input 页面时,类型转换
失败的表单域是否保留原来的错误输入。
非字段校验器风格:
Xml代码
<validators>
<validator type="conversion">
<param name="fieldName">age</param>
<param name="repopulateField">false</param>
<!-- 指定校验失败的提示信息 -->
<message>fail</message>
</validator>
</validators>
<validators>
<validator type="conversion">
<param name="fieldName">age</param>
<param name="repopulateField">false</param>
<!-- 指定校验失败的提示信息 -->
<message>fail</message>
</validator>
</validators> 字段校验器风格:
Xml代码
<validators>
<field name="age">
<field-validator type="conversion">
<param name="repopulateField">true</param>
<message>fail</message>
</field-validator>
</field>
</validators>
<validators>
<field name="age">
<field-validator type="conversion">
<param name="repopulateField">true</param>
<message>fail</message>
</field-validator>
</field>
</validators>
12. 字符串长度校验器
名称: stringlength ,它要求被校验字段的长度必须在指定范围内,否则校验失败。
参数
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
maxLength : 指定字段的最大长度。参数可选,不指定时,
最大长度不受 限制
minLength : 指定字段的最小长度。参数可选,不指定时,
最小长度不受限制
trim : 指定校验字段之前是否截断该字段前后空白。该参数可选,默认 true
非字段校验器风格:
Xml代码
<validators>
<validator type="stringlength">
<param name="fieldName">user</param>
<param name="minLength">4</param>
<param name="maxLength">20</param>
<message>fail</message>
</validator>
</validators>
<validators>
<validator type="stringlength">
<param name="fieldName">user</param>
<param name="minLength">4</param>
<param name="maxLength">20</param>
<message>fail</message>
</validator>
</validators>
字段校验器风格:
Xml代码
<validators>
<field name="user">
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">20</param>
<message>fail</message>
</field-validator>
</field>
</validators>
<validators>
<field name="user">
<field-validator type="stringlength">
<param name="minLength">4</param>
<param name="maxLength">20</param>
<message>fail</message>
</field-validator>
</field>
</validators>
13. 正则表达式校验器
名称: regex , 它检查被校验字段是否匹配一个正则表达式。
参数:
fieldName : 指定校验的 Action 属性名,如果采用校验器风格,
则无需指定该参数
expression :该参数是必须的,该参数指定匹配用的正则表达式
caseSensitive :该参数指明进行正则表达式匹配时,是否区分大小写。
参数可选,默认 true
非字段校验器风格:
Xml代码
<validators>
<validator type="regex">
<param name="fieldName">user</param>
<param name="expression"><![CDATA[(\w{4,20})]]></param>
<message>你的用户名长度必须在4到20之间,且必须是字母和数字</message>
</validator>
</validators>
<validators>
<validator type="regex">
<param name="fieldName">user</param>
<param name="expression"><![CDATA[(\w{4,20})]]></param>
<message>你的用户名长度必须在4到20之间,且必须是字母和数字</message>
</validator>
</validators>
字段校验器风格:
Xml代码
<validators>
<field name="user">
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,20})]]></param>
<message>你的用户名长度必须在4到20之间,且必须是字母和数字</message>
</field-validator>
</field>
</validators>
<validators>
<field name="user">
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,20})]]></param>
<message>你的用户名长度必须在4到20之间,且必须是字母和数字</message>
</field-validator>
</field>
</validators>
14. 基于 Annotation 校验器
基于 Annotation 的输入校验实际上是 Struts 2 “零配件”特性的部分,它允许使用 Annotation 来定义每个字段应该满足的规则 ,Struts 2 在 com.opensymphony.xwork2.validator.annotations 包下提供了大量验证器 Annotation ,这些 Annotation 和前面介绍的验证器大致上一一对应 ,可以自行查看 API 文档
配置
1. 使用 @Validation()Annotation 修饰 Action 类
2. 使用验证器 Annotation 修饰 Action 里各属性对应的 setter 方法 。
下面我们在前面 I18NValidate 应用的基础上进行修改,将该应用的 WEB-INF\src\lee 路径下的校验规则文件删除 ,修改该路径下的 RegistAction.java 文件,通过注释指定各属性应该满足的规则 。修改后的 Action 如下:
Java代码
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.validator.annotations.*;
import java.util.*;
import java.util.regex.*;
import java.text.*;
//使用@Validation修饰Action类
@Validation()
public class RegistAction extends ActionSupport
{
private String name;
private String pass;
private int age;
private Date birth;
//使用Annotation指定必填、正则表达式两个校验规则
@RequiredStringValidator(type = ValidatorType.FIELD,
key = "name.requried",message = "")
@RegexFieldValidator(type = ValidatorType.FIELD,
expression = "\\w{4,25}",key = "name.regex",message = "")
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return (this.name);
}
//使用Annotation指定必填、正则表达式两个校验规则
@RequiredStringValidator(type = ValidatorType.FIELD,
key = "pass.requried",message = "")
@RegexFieldValidator(type = ValidatorType.FIELD,
expression = "\\w{4,25}",key = "pass.regex",message = "")
public void setPass(String pass)
{
this.pass = pass;
}
public String getPass()
{
return (this.pass);
}
//使用Annotation指定整数范围校验规则
@IntRangeFieldValidator(message = "",
key = "age.range", min = "1", max = "150")
public void setAge(int age)
{
this.age = age;
}
public int getAge() {
return (this.age);
}
//使用Annotation指定日期范围校验规则
@DateRangeFieldValidator(message = "",
key = "birth.range", min = "1900/01/01", max = "2050/01/21")
public void setBirth(Date birth)
{
this.birth = birth;
}
public Date getBirth()
{
return (this.birth);
}
}
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.validator.annotations.*;
import java.util.*;
import java.util.regex.*;
import java.text.*;
//使用@Validation修饰Action类
@Validation()
public class RegistAction extends ActionSupport
{
private String name;
private String pass;
private int age;
private Date birth;
//使用Annotation指定必填、正则表达式两个校验规则
@RequiredStringValidator(type = ValidatorType.FIELD,
key = "name.requried",message = "")
@RegexFieldValidator(type = ValidatorType.FIELD,
expression = "\\w{4,25}",key = "name.regex",message = "")
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return (this.name);
}
//使用Annotation指定必填、正则表达式两个校验规则
@RequiredStringValidator(type = ValidatorType.FIELD,
key = "pass.requried",message = "")
@RegexFieldValidator(type = ValidatorType.FIELD,
expression = "\\w{4,25}",key = "pass.regex",message = "")
public void setPass(String pass)
{
this.pass = pass;
}
public String getPass()
{
return (this.pass);
}
//使用Annotation指定整数范围校验规则
@IntRangeFieldValidator(message = "",
key = "age.range", min = "1", max = "150")
public void setAge(int age)
{
this.age = age;
}
public int getAge() {
return (this.age);
}
//使用Annotation指定日期范围校验规则
@DateRangeFieldValidator(message = "",
key = "birth.range", min = "1900/01/01", max = "2050/01/21")
public void setBirth(Date birth)
{
this.birth = birth;
}
public Date getBirth()
{
return (this.birth);
}
}
上面代码使用了验证器 Annotation 修饰了各属性的 setter 方法 。通过在 Action 中使用 Annotation 指定各字段应该满足的校验规则,就可以避免书写 XML 校验规则文件。
但是所有内容都被写入 java 代码中,会给后期维护带来一定困难
发表评论
-
struts2 校验2
2012-03-18 23:33 688转自:http://blog.csdn.net/lilp_nd ... -
struts2 map list处理
2012-03-07 15:50 744http://younglibin.iteye.com/blo ... -
struts2参考资料
2012-01-31 09:20 535http://struts.apache.org/2.0.14 ... -
获取struts2中Action中的属性的值
2012-01-07 17:13 773http://www.chinaitlab.com/www/t ... -
struts
2011-12-11 23:27 532http://java.chinaitlab.com/spec ...
相关推荐
Struts2作为一款流行的Java Web开发框架,提供了一套强大的校验框架,使得开发者能够方便地对用户输入数据进行验证,确保数据的准确性和安全性。本文将深入探讨Struts2校验框架的应用,包括其核心概念、配置方式、...
struts2校验器,字段,非字段校验器的语法规则……
### Struts2校验框架使用心得 #### 一、Struts2校验框架概述 Struts2是一款基于Java的企业级Web应用开发框架,它能够帮助开发者构建出结构清晰、易于维护的应用程序。其中,Struts2提供的校验框架是其核心特性之一...
在Struts2中,校验器(Validator)是处理用户输入验证的核心组件,确保提交到服务器的数据符合预设的业务规则。这篇博客文章可能是关于如何使用Struts2的内置校验机制以及自定义校验规则的探讨。 Struts2的校验框架...
### Struts2校验框架详解 #### 一、概述 Struts2作为一款流行的Java Web应用框架,提供了丰富的功能来支持开发人员构建高效且可维护的应用程序。其中,Struts2校验框架(Validation Framework)是该框架的核心特性...
Struts2 和Struts1同样也提供了校验框架,但在Struts2 已经不再把校验框架做为一个插件,而是已经内置到了Struts2中,而且配置起来更为简单方便,功能也更强大。
本学习笔记主要探讨了Struts2中的校验器(Validator)和校验框架,帮助开发者理解如何有效地实现数据验证,确保应用程序的健壮性。 首先,我们来看Struts2的校验框架。这个框架提供了强大的功能,可以对用户输入...
### Struts2校验器类型详解 #### 一、Struts2内建校验器 在探讨Struts2校验器之前,我们首先需要了解这些校验器是如何被定义和集成到框架中的。如文中所述,Struts2的内建校验器主要位于`xwork-2.0.4.jar`压缩包中...
### Struts2校验框架详解 #### 一、引言 在Web开发中,表单数据的有效性验证是一项重要的工作。Struts2框架提供了一套强大的校验机制,可以帮助开发者轻松实现客户端和服务端的数据验证。本文将通过一个具体的示例...
### Struts2输入校验深度解析 #### 一、手动输入完成校验 在Struts2框架中,输入校验是确保数据完整性和安全性的重要环节。对于手动输入完成校验,Struts2提供了灵活的机制。 1. **普通处理方式**:在Action类中...
"struts2校验器_xml格式"指的是使用XML文件进行Struts2中的表单验证配置。 XML格式的验证器在Struts2中提供了灵活和可扩展的方式来定义验证规则。这些规则定义了用户在表单中输入的数据应该如何被检查,以确保它们...
在Struts2中,校验框架是一个核心组件,它负责处理用户输入的数据验证,确保数据的正确性和完整性。以下是对Struts2校验框架的详细讲解。 1. **Struts2验证框架的基本概念** Struts2的验证框架主要负责在用户提交...
(2):对密码校验的规则是用户不能为空,且只能是数字,长度为8到20之间。 (3):年龄的校验规则是必须是整数,且在1到120之间。 (4):生日的校验规则是必须在1950-1-1到1990-1-1之间。 (5):所有提示信息均要...
2、用户名只能使用数字或者字母,长度为6~20之间; 3、密码、确认密码必须是数字和字母,长度为6~20之间; 4、密码、确认密码必须相同; 5、收入必须在0.001~10000.000之间; 6、年龄必须是整数且必须在0~120...
在Struts2中,数据校验是保证应用程序输入数据正确性、安全性和一致性的关键步骤。本篇文章将深入探讨Struts2的数据校验机制,并结合提供的资源文件ITEye_ValidateAction来解析其工作原理。 首先,Struts2的数据...
与Struts1相比,Struts2具有显著的优势,包括更少的侵入性设计、支持AOP编程的拦截器、类型转换器、多样的表现层技术以及更灵活的数据校验机制。 首先,Struts2的无侵入式设计使得应用程序不再紧密依赖Servlet API...
在Struts2中,校验是确保数据质量和系统安全的关键环节。本文将深入探讨Struts2中的验证机制,以及如何利用它来提高应用的健壮性。 1. **Struts2验证框架基础** Struts2提供了强大的内置验证框架,允许开发者定义...