Struts 2框架的输入校验
2013-04-06 19:27
302 查看
Struts 2框架的输入校验
(1)
文件中“<!--”和“-->”标记之间的内容表明,一个校验规则文件开始的内容是如下内容:
(2)
validators是校验规则文件的根元素。Validators元素可以包含一个或多个field或validator子元素。
(3)
field子元素是基于字段定义输入校验的验证规则。field子元素有一个必选的name属性。Name:必选属性,用于设置要验证的表单字段的名称。
另外,field子元素可以包含一个或多个field-validator子元素,用于设置校验器。
(4)
field-validator子元素有type和short-circuit两个属性。
type:必选属性,用于设置验证器的名称。
short-circuit:如果为同一个表单字段配置多个验证器,当某个验证器验证失败后,其后的验证器是否还执行,可以使用short-circuit属性进行设置,默认值为false。如果short-circuit属性值设置为true,则其后的验证器不执行。
(5)
validator子元素是基于验证器定义输入校验的验证规则。Validator子元素有type和short-circuit两个属性。
type:必选属性,用于设置验证器的名称。
short-circuit:用于设置当某个验证器验证失败后,其后的验证器是否还执行,默认值为false。如果short-circuit属性值设置为true,则其后的验证器不执行。
另外,validator子元素包含0个、1个、或多个param子元素以及一个message子元素
(6)
param子元素为验证器传递参数。
name:必选属性,用于设置参数的名称,参数的值嵌套在param元素内。
(7)
message子元素设置当验证器验证失败时显示的错误信息。
Key:可选属性,用于指定错误信息在国际化资源文件中的键(key)。
actionAlias是指在Struts框架的配置文件中给定的action的名称。通常,action的name属性值和method名称匹配,但是也可以不同。
Actionname-validation.xml中的校验规则:在调用Action类中的任何方法时都会起作用
Actionname-actionAlias-validation.xml中的校验规则:仅在actionAlias和action的name属性值相同时才起作用。
如果同时配置了两个校验规则文件,则在Actionname-validation.xml文件中只放所有method都使用的验证规则。
例子:如下表单:
假定在该应用中要求这三个请求参数必须满足如下要求:
1、name和password只能是字母和数组,且长度必须在4到16之间。
2、年龄必须是1到150之间的整数。
[html] view plaincopyprint?
1.
<s:form action="regist" >
2.
<s:textfield name="name" label="用户名"></s:textfield>
3.
<s:textfield name="password" label="密码"></s:textfield>
4.
<s:textfield name="age" label="年龄"></s:textfield>
5.
<s:submit value="注册"></s:submit>
6.
</s:form>
下面是该请求的Action代码:
[java] view plaincopyprint?
1.
public class RegistAction extends ActionSupport {
2.
private String name;
3.
private String password;
4.
private int age;
5.
6.
//省略上面三个属性的getter和setter方法
7.
public String execute() throws Exception {
8.
9.
return SUCCESS;
10.
}
上面的Action中包含的execute方法,之间返回success字符串,不需要做任何的处理,所以这个Action不具备任何输入校验的功能。
但是通过为该Action指定一个校验文件后,既可以利用Struts 2的输入校验功能对该Action进行校验。
该校验文件应该遵守以下的命名规则:<Action name>-validation.xml,且该文件应该保持在和Action相同的路径下。
校验文件如下:
[html] view plaincopyprint?
1.
<validators>
2.
<!-- 校验Action的name属性 -->
3.
<field name="name">
4.
<!-- 指定name属性必须满足的必填规则 -->
5.
<field-validator type="requiredstring">
6.
<param name="trim">true</param>
7.
<message>必须输入名字</message>
8.
</field-validator>
9.
<!-- 指定name属性必须匹配正则表达式 -->
10.
<field-validator type="regex">
11.
<param name="expression"><![CDATA[(\w{4,25})]]></param>
12.
<message>您输入的用户名只能是字母和数字,且长度必须在4到25之间</message>
13.
</field-validator>
14.
</field>
15.
16.
<!-- 校验Action的password属性 -->
17.
<field name="password">
18.
<!-- 指定password属性必须满足必填的规则 -->
19.
<field-validator type="requiredstring">
20.
<param name="trim">true</param>
21.
<message>必须输入密码</message>
22.
</field-validator>
23.
<!-- 指定password属性必须满足匹配指定的正则表达式 -->
24.
<field-validator type="regex">
25.
<param name="expression"><![CDATA[(\w{4,25})]]></param>
26.
<message>您输入的密码指定是字母和数字,且长度必须在4到25之间</message>
27.
</field-validator>
28.
</field>
29.
30.
<!-- 校验Action的age属性 -->
31.
<field name="age">
32.
<field-validator type="int">
33.
<param name="min">1</param>
34.
<param name="max">150</param>
35.
<message>年龄必须在1到150之间</message>
36.
</field-validator>
37.
</field>
38.
</validators>
当输入校验失败后,Struts 2是自动返回名为“input”的result,因此需要在struts.xml中配置名为"input"的Result.
如下:
[html] view plaincopyprint?
1.
<package name="myaction" extends="struts-default">
2.
<action name="regist" class="com.app.action.RegistAction" >
3.
<result name="input">/regist.jsp</result>
4.
<result name="success">/welcome.jsp</result>
5.
</action>
6.
lt;/package>
指定了校验失败后应用会跳转到的物理资源页面后,这样我们就可以在该页面中添加<s:fielderror/>来输出错误提示
当用户提交请求时,Struts 2的校验框架会根据该文件对用户请求进行校验。如果用户的输入不满足校验规则,浏览器就会显示相应的错误提示:
在同一个校验规则文件中,可以混合使用<field>子元素和<validator>子元素定义校验规则,如上面例子所示。
当使用字段校验器时,基于字段校验去的语法总是优于基于validator校验器的语法,因为前者更容易根据字段组织字段校验器,特别是当一个字段需要多个字段校验器时更显得方便。
Struts 2框架将首先搜索Actionname-validation.xml文件,然后搜索Actionname-actionAlias-validation.xml文件。因此,如果两个校验规则文件中的校验规则有重复时,则校验规则将重复执行。
另外,如果在定义某业务控制器类(如BookAction)时,继承了BookParentAction类,同时实现了IBookAction接口。这时校验规则文件的搜索顺序如下:
① IBookAction-validation.xml
② IBookAction-actionAlias-validation.xml
③ BookParentAction-actionAlias-validation.xml
④ BookParentAction-actionAlias-validation.xml
⑤ BookAction-actionAlias-validation.xml
⑥ BookAction-actionAlias-validation.xml
(2)校验规则文件中校验器的搜索顺序
在同一校验规则文件中,既可以定义基于字段的校验规则,又可以定义基于validator校验器的校验规则。那么同一个校验规则文件中,Struts
2框架将按照如下的顺序运行校验:
① 使用<validator>定义的校验器优先于使用<field>定义的校验器;
② 如果都是使用<validator>定义的校验器,则按照校验器的定义顺序进行校验;
③ 如果都是使用<field>定义的校验器,则按照校验器的定义顺序进行校验;
④ 如果某个短路的校验器校验失败,则相同表单字段的后续校验器就不再执行校验。
Struts 2的输入校验需要经过以下几个步骤:
1、类型转换器负责对字符串的请求参数执行类型转换,并将这些值设置为Action的 属性值。2、在执行类型转换过程中可能出现异常,如果出现异常,将异常信息保存到ActionContext中。
conversionError拦截器负责将其封装到FieldError里,然后执行第三步;如果转换过程中没有异常信息,则直接进入第三步。
3、使用Struts 2应用配置的校验器进行输入校验
4、通过反射调用validateXxx()方法,其中Xxx是即将处理用户请求的处理逻辑所对应的方法。
5、调用Action类里的validate方法。
6、如果经过上面5步都没有出现FieldError,将调用Action里处理用户请求的处理方法;如果出现了FieldError,系统将会转入input逻辑视图所指定的视图资源。
流程如下:
Ø 将输入页面的表单元素全部改为使用Struts 2标签来生成表单。
Ø 为该<s:form..../>元素增加validate="true"属性。
1.
<%@ page contentType="text/html; charset=GBK" language="java" %>
2.
<%@ taglib prefix="s" uri="/struts-tags"%>
3.
<html>
4.
<head>
5.
<title>register</title>
6.
</head>
7.
<body>
8.
<s:form action="login" validate="true">
9.
<s:textfield name="username" label="用户名"/>
10.
<s:textfield name="pass" label="密码"/>
11.
<s:textfield name="repass" label="确认密码"/>
12.
<s:textfield name="age" label="年龄"/>
13.
<s:textfield name="high" label="身高"/>
14.
<s:textfield name="email" label="邮箱"/>
15.
<s:textfield name="website" label="个人主页"/>
16.
<s:textfield name="birthday" label="生日"/>
17.
<s:submit/>
18.
</s:form>
19.
</body>
20.
</html>
必填校验器
Ø requiredstring validator必填字符串校验器
Ø stringlength validator字符串长度校验器
Ø regex validator正则表达式校验器
Ø email validator电子邮件校验器
Ø url validator网址校验器
Ø int validator整型校验器
Ø double validator
双精度校验器
对于客户端校验有三个地方需要注意:
Ø
Struts 2的<s:form.../>元素有一个theme属性,不要将该属性指定为simple。
Ø 浏览者不能直接访问启用客户端校验的表单页面,这样会引起异常。我们可以把启用客户端校验的表单页面放到WEB-INF路径下,让浏览者访问所有资源之间都先经过它的核心Filter
Ø 启动客户端校验的表单页面的action和namespace要分开写。
在xwork-core-2.2.1.jar文件中的com\opensymphony\xwork2\validator\validators路径下的default.xml文件,该文件就是Struts 2默认的校验器注册文件。
[html] view plaincopyprint?
<validators>
1.
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
2.
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
3.
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
4.
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
5.
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
6.
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
7.
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
8.
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
9.
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
10.
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
11.
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
12.
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
13.
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
14.
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
15.
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
16.
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
17.
</validators>
通过上面可以发现,注册一个校验器只需要通过一个<validator.../>元素即可注册一个校验器,每一个<validator.../>元素的name属性指定该校验器的名字,class属性指定该校验器的实现类。
常用的内建校验器有:
表1.常见的内建校验器
5.自定义校验器
使用自定义校验器主要有三个步骤:
(1)首先创建自定义校验器类
(2)然后注册自定义校验器类
(3)最后使用注册的自定义校验器
1.服务器端输入校验
1.1使用编码进行输入校验
使用validate()方法进行输入校验时,会对当前Action中的所有的方法有效。由于Struts 2框架可以在同一个Action()中使用的不同方法来处理不同的请求,因此,如果只想对Action中的某个方法进行输入校验,则可以使用validateXxx()方法来实现,其中Xxx是将Action中的方法名称为xxx()的首字母大写。1.2 实用配置文件进行输入校验
1.2.1校验规则文件的结构
校验规则文件的结构是由xwork-validator-1.0.2.dtd文件定义的,内容如下:<?xml version="1.0" encoding="UTF-8"?> <!-- XWork Validators DTD. Used the following DOCTYPE. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> --> <!ELEMENT validators (field|validator)+> <!ELEMENT field (field-validator+)> <!ATTLIST field name CDATA #REQUIRED > <!ELEMENT field-validator (param*, message)> <!ATTLIST field-validator type CDATA #REQUIRED short-circuit (true|false) "false" > <!ELEMENT validator (param*, message)> <!ATTLIST validator type CDATA #REQUIRED short-circuit (true|false) "false" > <!ELEMENT param (#PCDATA)> <!ATTLIST param name CDATA #REQUIRED > <!ELEMENT message (#PCDATA)> <!ATTLIST message key CDATA #IMPLIED > |
文件中“<!--”和“-->”标记之间的内容表明,一个校验规则文件开始的内容是如下内容:
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> |
validators是校验规则文件的根元素。Validators元素可以包含一个或多个field或validator子元素。
(3)
field子元素是基于字段定义输入校验的验证规则。field子元素有一个必选的name属性。Name:必选属性,用于设置要验证的表单字段的名称。
另外,field子元素可以包含一个或多个field-validator子元素,用于设置校验器。
(4)
field-validator子元素有type和short-circuit两个属性。
type:必选属性,用于设置验证器的名称。
short-circuit:如果为同一个表单字段配置多个验证器,当某个验证器验证失败后,其后的验证器是否还执行,可以使用short-circuit属性进行设置,默认值为false。如果short-circuit属性值设置为true,则其后的验证器不执行。
(5)
validator子元素是基于验证器定义输入校验的验证规则。Validator子元素有type和short-circuit两个属性。
type:必选属性,用于设置验证器的名称。
short-circuit:用于设置当某个验证器验证失败后,其后的验证器是否还执行,默认值为false。如果short-circuit属性值设置为true,则其后的验证器不执行。
另外,validator子元素包含0个、1个、或多个param子元素以及一个message子元素
(6)
param子元素为验证器传递参数。
name:必选属性,用于设置参数的名称,参数的值嵌套在param元素内。
(7)
message子元素设置当验证器验证失败时显示的错误信息。
Key:可选属性,用于指定错误信息在国际化资源文件中的键(key)。
1.2.2校验规则文件的命名
校验规则文件有两种命名方式,其名称分别是Actionname-validation.xml和Actionname-actionAlias-validation.xml,其中Actionname是Action类的名称。校验规则文件和对应的Action保存在相同的目录下。actionAlias是指在Struts框架的配置文件中给定的action的名称。通常,action的name属性值和method名称匹配,但是也可以不同。
Actionname-validation.xml中的校验规则:在调用Action类中的任何方法时都会起作用
Actionname-actionAlias-validation.xml中的校验规则:仅在actionAlias和action的name属性值相同时才起作用。
如果同时配置了两个校验规则文件,则在Actionname-validation.xml文件中只放所有method都使用的验证规则。
1.2.3基于字段的校验规则
RegisterAction-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> <field name="username"> <field-validator type="requiredstring"> <param name="trim">false</param> <message>username can't be blank!</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">4</param> <param name="maxLength">6</param> <param name="trim">false</param> <message key="username.invalid"></message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <message>password can't be blank!</message> </field-validator> <field-validator type="stringlength"> <param name="minLength">4</param> <param name="maxLength">6</param> <message>length of password should be between ${minLength} and ${maxLength}</message> </field-validator> </field> <field name="age"> <field-validator type="required"> <message>age can't be blank!</message> </field-validator> <field-validator type="int"> <param name="min">10</param> <param name="max">40</param> <message>age should be between ${min} and ${max}</message> </field-validator> </field> <field name="birthday"> <field-validator type="required"> <message>birthday can't be blank!</message> </field-validator> <field-validator type="date"> <param name="min">2005-1-1</param> <param name="max">2007-12-31</param> <message>birthday should be between ${min} and ${max}</message> </field-validator> </field> </validators> |
假定在该应用中要求这三个请求参数必须满足如下要求:
1、name和password只能是字母和数组,且长度必须在4到16之间。
2、年龄必须是1到150之间的整数。
[html] view plaincopyprint?
1.
<s:form action="regist" >
2.
<s:textfield name="name" label="用户名"></s:textfield>
3.
<s:textfield name="password" label="密码"></s:textfield>
4.
<s:textfield name="age" label="年龄"></s:textfield>
5.
<s:submit value="注册"></s:submit>
6.
</s:form>
下面是该请求的Action代码:
[java] view plaincopyprint?
1.
public class RegistAction extends ActionSupport {
2.
private String name;
3.
private String password;
4.
private int age;
5.
6.
//省略上面三个属性的getter和setter方法
7.
public String execute() throws Exception {
8.
9.
return SUCCESS;
10.
}
上面的Action中包含的execute方法,之间返回success字符串,不需要做任何的处理,所以这个Action不具备任何输入校验的功能。
但是通过为该Action指定一个校验文件后,既可以利用Struts 2的输入校验功能对该Action进行校验。
该校验文件应该遵守以下的命名规则:<Action name>-validation.xml,且该文件应该保持在和Action相同的路径下。
校验文件如下:
[html] view plaincopyprint?
1.
<validators>
2.
<!-- 校验Action的name属性 -->
3.
<field name="name">
4.
<!-- 指定name属性必须满足的必填规则 -->
5.
<field-validator type="requiredstring">
6.
<param name="trim">true</param>
7.
<message>必须输入名字</message>
8.
</field-validator>
9.
<!-- 指定name属性必须匹配正则表达式 -->
10.
<field-validator type="regex">
11.
<param name="expression"><![CDATA[(\w{4,25})]]></param>
12.
<message>您输入的用户名只能是字母和数字,且长度必须在4到25之间</message>
13.
</field-validator>
14.
</field>
15.
16.
<!-- 校验Action的password属性 -->
17.
<field name="password">
18.
<!-- 指定password属性必须满足必填的规则 -->
19.
<field-validator type="requiredstring">
20.
<param name="trim">true</param>
21.
<message>必须输入密码</message>
22.
</field-validator>
23.
<!-- 指定password属性必须满足匹配指定的正则表达式 -->
24.
<field-validator type="regex">
25.
<param name="expression"><![CDATA[(\w{4,25})]]></param>
26.
<message>您输入的密码指定是字母和数字,且长度必须在4到25之间</message>
27.
</field-validator>
28.
</field>
29.
30.
<!-- 校验Action的age属性 -->
31.
<field name="age">
32.
<field-validator type="int">
33.
<param name="min">1</param>
34.
<param name="max">150</param>
35.
<message>年龄必须在1到150之间</message>
36.
</field-validator>
37.
</field>
38.
</validators>
当输入校验失败后,Struts 2是自动返回名为“input”的result,因此需要在struts.xml中配置名为"input"的Result.
如下:
[html] view plaincopyprint?
1.
<package name="myaction" extends="struts-default">
2.
<action name="regist" class="com.app.action.RegistAction" >
3.
<result name="input">/regist.jsp</result>
4.
<result name="success">/welcome.jsp</result>
5.
</action>
6.
lt;/package>
指定了校验失败后应用会跳转到的物理资源页面后,这样我们就可以在该页面中添加<s:fielderror/>来输出错误提示
当用户提交请求时,Struts 2的校验框架会根据该文件对用户请求进行校验。如果用户的输入不满足校验规则,浏览器就会显示相应的错误提示:
1.2.4基于validator校验器的校验规则
RegisterAction-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> <validator type="requiredstring"> <param name="fieldName">username</param> <message>username can't be blank!</message> </validator> <validator type="stringlength"> <param name="fieldName">username</param> <param name="minLength">4</param> <param name="maxLength">6</param> <message>length of username should be between ${minLength} and ${maxLength}</message> </validator> <field name="birthday"> <field-validator type="required"> <message>birthday can't be blank!</message> </field-validator> <field-validator type="date"> <param name="min">2005-1-1</param> <param name="max">2007-12-31</param> <message>birthday should be between ${min} and ${max}</message> </field-validator> </field> </validators> |
当使用字段校验器时,基于字段校验去的语法总是优于基于validator校验器的语法,因为前者更容易根据字段组织字段校验器,特别是当一个字段需要多个字段校验器时更显得方便。
1.2.5校验规则的搜索顺序
(1)校验规则文件的搜索顺序Struts 2框架将首先搜索Actionname-validation.xml文件,然后搜索Actionname-actionAlias-validation.xml文件。因此,如果两个校验规则文件中的校验规则有重复时,则校验规则将重复执行。
另外,如果在定义某业务控制器类(如BookAction)时,继承了BookParentAction类,同时实现了IBookAction接口。这时校验规则文件的搜索顺序如下:
① IBookAction-validation.xml
② IBookAction-actionAlias-validation.xml
③ BookParentAction-actionAlias-validation.xml
④ BookParentAction-actionAlias-validation.xml
⑤ BookAction-actionAlias-validation.xml
⑥ BookAction-actionAlias-validation.xml
(2)校验规则文件中校验器的搜索顺序
在同一校验规则文件中,既可以定义基于字段的校验规则,又可以定义基于validator校验器的校验规则。那么同一个校验规则文件中,Struts
2框架将按照如下的顺序运行校验:
① 使用<validator>定义的校验器优先于使用<field>定义的校验器;
② 如果都是使用<validator>定义的校验器,则按照校验器的定义顺序进行校验;
③ 如果都是使用<field>定义的校验器,则按照校验器的定义顺序进行校验;
④ 如果某个短路的校验器校验失败,则相同表单字段的后续校验器就不再执行校验。
Struts 2的输入校验需要经过以下几个步骤:
1、类型转换器负责对字符串的请求参数执行类型转换,并将这些值设置为Action的 属性值。2、在执行类型转换过程中可能出现异常,如果出现异常,将异常信息保存到ActionContext中。
conversionError拦截器负责将其封装到FieldError里,然后执行第三步;如果转换过程中没有异常信息,则直接进入第三步。
3、使用Struts 2应用配置的校验器进行输入校验
4、通过反射调用validateXxx()方法,其中Xxx是即将处理用户请求的处理逻辑所对应的方法。
5、调用Action类里的validate方法。
6、如果经过上面5步都没有出现FieldError,将调用Action里处理用户请求的处理方法;如果出现了FieldError,系统将会转入input逻辑视图所指定的视图资源。
流程如下:
2.客户端输入校验
2.1在Struts 2应用中使用客户端校验
对于客户端校验非常简单,只需改变如下两个地方:Ø 将输入页面的表单元素全部改为使用Struts 2标签来生成表单。
Ø 为该<s:form..../>元素增加validate="true"属性。
1.
<%@ page contentType="text/html; charset=GBK" language="java" %>
2.
<%@ taglib prefix="s" uri="/struts-tags"%>
3.
<html>
4.
<head>
5.
<title>register</title>
6.
</head>
7.
<body>
8.
<s:form action="login" validate="true">
9.
<s:textfield name="username" label="用户名"/>
10.
<s:textfield name="pass" label="密码"/>
11.
<s:textfield name="repass" label="确认密码"/>
12.
<s:textfield name="age" label="年龄"/>
13.
<s:textfield name="high" label="身高"/>
14.
<s:textfield name="email" label="邮箱"/>
15.
<s:textfield name="website" label="个人主页"/>
16.
<s:textfield name="birthday" label="生日"/>
17.
<s:submit/>
18.
</s:form>
19.
</body>
20.
</html>
2.2 客户端校验支持的校验器
Ø required validator必填校验器
Ø requiredstring validator必填字符串校验器
Ø stringlength validator字符串长度校验器
Ø regex validator正则表达式校验器
Ø email validator电子邮件校验器
Ø url validator网址校验器
Ø int validator整型校验器
Ø double validator
双精度校验器
对于客户端校验有三个地方需要注意:
Ø
Struts 2的<s:form.../>元素有一个theme属性,不要将该属性指定为simple。
Ø 浏览者不能直接访问启用客户端校验的表单页面,这样会引起异常。我们可以把启用客户端校验的表单页面放到WEB-INF路径下,让浏览者访问所有资源之间都先经过它的核心Filter
Ø 启动客户端校验的表单页面的action和namespace要分开写。
3.Ajax校验
4.Struts 2框架的内置校验器
Struts 2提供了大量的内建校验器,这些内建校验器可以满足大部分应用的校验需求。在xwork-core-2.2.1.jar文件中的com\opensymphony\xwork2\validator\validators路径下的default.xml文件,该文件就是Struts 2默认的校验器注册文件。
[html] view plaincopyprint?
<validators>
1.
<validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
2.
<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
3.
<validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
4.
<validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
5.
<validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
6.
<validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
7.
<validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
8.
<validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
9.
<validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
10.
<validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
11.
<validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
12.
<validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
13.
<validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
14.
<validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
15.
<validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
16.
<validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
17.
</validators>
通过上面可以发现,注册一个校验器只需要通过一个<validator.../>元素即可注册一个校验器,每一个<validator.../>元素的name属性指定该校验器的名字,class属性指定该校验器的实现类。
常用的内建校验器有:
名字 | 校验器名 | 说明 |
required | 必填校验器 | 该校验器要求指定的字段必须有值 |
requiredstring | 必填字符串校验器 | 该校验器要求字段值必须非空且长度大于0 |
int、long、short | 整型校验器 | 该校验器要求字段的整数值必须在指定范围内 |
date | 日期校验器 | 该校验器要求字段的日期值必须在指定范围内 |
expression | 表达式校验器 | 非字段校验器,不可在字段校验器的配置风格中使用,它要求OGNL表达式返回true,当返回true时,该校验通过;否则未通过 |
fieldexpression | 字段表达式校验器 | 该校验器要求指定字段满足一个逻辑表达式 |
email | 电子邮件校验器 | 该校验器要求被检查字段的字符如果非空,则必须是合法的邮件地址 |
url | 网址校验器 | 该校验器要求被检查字段的字符如果非空,则必须是合法的URL地址 |
visitor | Visitor校验器 | 该校验器主要用于检测Action里的复合属性 |
conversion | 类型转换校验器 | 该校验器检查被校验的字段在类型转换过程中是否出现错误 |
stringlength | 字符串长度校验器 | 该校验器要求被校验字段的长度必须在指定范围内 |
regex | 正则表达式校验器 | 该校验器检查被校验字段是否匹配一个正则表达式 |
5.自定义校验器
使用自定义校验器主要有三个步骤:
(1)首先创建自定义校验器类
(2)然后注册自定义校验器类
(3)最后使用注册的自定义校验器
相关文章推荐
- Struts 2读书笔记-----使用Struts 2的输入校验
- struts入门之输入校验
- Struts 2 类型转换器 输入校验 拦截器
- Struts运行的基本流程及输入校验
- 【4】SSH整合-加入struts校验框架
- Struts 学习笔记2(输入校验、国际化、异常处理)
- Struts 2 的输入校验
- struts第十一天--通过xml的方式来对输入参数进行校验
- struts2之二(输入校验)
- Struts2输入校验之用校验框架校验
- struts校验框架
- struts 输入校验
- Struts中的校验框架
- struts第十二天--通过xml对指定方法进行输入校验
- struts2使用XML框架进行输入校验
- struts validate校验框架
- struts校验框架的一个异常
- 框架之Struts2 处理结果类型、struts.xml标签属性及验证输入的方式
- 简析struts2.x中的输入校验
- 关于Struts2基于验证框架的输入校验的经验