Struts2输入校验
2014-01-06 00:00
190 查看
一、Struts2输入校验介绍
Struts2提供了功能强大的输入校验机制,通过Struts2内建的输入校验器,应用无需书写任何代码,即可完成大部分的校验功能,并可以同时完成客户端和服务器端的校验。如果应用的输入校验规则特别,Struts也允许通过重写validate方法来完成自定义校验。
Struts2中可以通过重写validate方法来完成输入校验。如果我们重写了validate方法,则该方法会应用于此Action中的所有提供服务的业务方法。Struts2支持校验特定方法的validateXxx()方法。例如某个Action中有一个save()业务方法,我们可以写一个validateSave()方法来进行save()的特殊校验,客户端请求调用的次序如下:
validateSave()--------------àvalidate()------------àsave()
Struts2的输入校验流程如下:
1. 类型转换器负责对字符串的请求参数执行类型转换,并将这此值设置成Action的属性值。
2. 在执行类型转换器过程中可能出现异常,如果出现异常,将异常信息保存到ActionContext中,conversionError拦截器负责将其封装到fieldError里,然后执行第3步;如果转换过程没有异常信息,则直接进入第3步。
3. 通过反射嗲用validateXxx()方法,其中Xxx是即将处理用户请求的处理逻辑所对应的方法名。
4. 通过Action类里的validate()方法
5. 如果经过上面4步都没有出现fieldError,将调用Action里处理用户的处理方法;如果出现了fieldError,系统将转入input逻辑视图所指定的视图资源。
二、Struts2输入检验
1. 最基础的Struts输入检验
Struts2中单独对每一个Action指定一个校验文件,它的命名方式ActionName-validate.xml。他存放在与Action相同的保重,校验只需要配置一个校验文件即可实现。系统的其他地方不需要改动,系统自动加载该文件。校验PersonAction-validate.xml如下例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!--校验文件的根元素-->
<validators>
<!--校验Action的username属性-->
<field name="username">
<!--指定username属性必须满足必填规则-->
<field-validator type="requiredstring">
<!--校验去掉username属性的前后空格-->
<param name="trim">true</param>
<!--提示信息-->
<message>用户名不能为空!</message>
</field-validator>
</field>
<field name="mobile">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>手机号不能为空!</message>
</field-validator>
<!—指定手机号必须满足匹配指定的正则表达式-->
<field-validator type="regex">
<param name="expression"><![CDATA[^1[358]\\d{9}$]]></param>
<message>手机号格式不正确!</message>
</field-validator>
</field>
</validators>
上面的配置文件的编写是对Action中所有的的方法进行了校验,如果想要对指定的Action中的方法进行校验,只要将将配置文件的命名改为ActionName-xxx-validate.xml即可。
2. Struts2中输入校验提示信息的国际化
在Struts2的校验中应用国际化也非常简单,请看如下xml配置代码
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key=”username.requied”> </message>
</field-validator>
</field>
<field name="mobile">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>手机号不能为空!</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[^1[358]\\d{9}$]]></param>
<message key=”mobile.regex”> </message>
</field-validator>
</field>
<span style="font-family: Arial; background-color: rgb(255, 255, 255);"></span>
Message元素指定key属性指定的是国际化资源中对应的key。还可以使用一下配置国际化资源中的信息:<message>${getText(“username.requried”)}</message>这种方式是通过调用ActionSupport类中getText()方法来获取国际化资源的。
3、 Struts2中应用客户端输入校验
使用客户端输入校验可以减轻服务器的负担。 Struts2 对客户端的输入校验进行了封装,使得我们开发时特别容易。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册页面</title>
</head>
<body>
<s:form action="save" validate="true">
<s:textfield label="用户名" name="name"></s:textfield>
<s:password label="密码" name="pass"></s:password>
<s:textfield label="年龄" name="age"></s:textfield>
<s:textfield label="生日" name="birth"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
<span style="font-family: Arial; background-color: rgb(255, 255, 255);"></span>
注意这里要用Struts2的标签,form的validate属性要设置为true,并且不要将theme属性指定为simple(simple表示struts2将把这个解析成普通的HTML标签)
2.校验配置文件:这里的校验配置文件同原先的配置文件并没有不同,但是这里使用<message key=”name.requried”/>无法从全局国际化资源中获取信息,只能使用<message>${getText(“name.requried”)}</message>方式获取国际化资源。
在Struts2中并不是所有的服务器端校验都可以转换成客户端校验。客户端校验仅仅支持如下校验器:
required validator 必填校验器
requiredstring validator 必填字符串校验器
stringlength validator 字符串长度校验器
regex validator 正则表达式校验器
email validator 邮件校验器
url validator 网址校验器
int validator 整数校验器
double validator 双精度数校验器 。
三、多个校验器规则文件的搜索次序
例如有一个 LoginAction 继承 BaseAction ,这两个 Action中都有业务方法 login ,并且存在 4 份校验规则文件如下: BaseAction-vadition.xml, BaseAction-login-validation.xml , LoginAction-validation.xml, LoginAction-login-validation.xml 那么用户访问 LoginAction 的 login 方法里,会按照以上的顺序执行校验规则,实际的校验规则是以上四个校验规则的总和,但是如果存在冲突的情况下,后面的校验规则优先。
四、短路校验器的配置
Struts2 默认的校验配置是非短路的方式,即把一个字段所有的不符合要求的提示都提示用户,我们也可以配置以短路的方式提示用户,即当用户输入的条件不满足第一次校验的时候就返回提示信息,不再往下执行。这种配置方式只能是以字段为基础的校验器。只需要在 <field-validator> 元素上加上 short-circuit="true" 即可,例如:
<field name="name">
<field-validator type="requiredstring" short-circuit="true">
<param name="trim">true</param>
<message>${getText("name.requried")}</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<message>${getText("name.regex")}</message>
</field-validator>
</field>
Struts2提供了功能强大的输入校验机制,通过Struts2内建的输入校验器,应用无需书写任何代码,即可完成大部分的校验功能,并可以同时完成客户端和服务器端的校验。如果应用的输入校验规则特别,Struts也允许通过重写validate方法来完成自定义校验。
Struts2中可以通过重写validate方法来完成输入校验。如果我们重写了validate方法,则该方法会应用于此Action中的所有提供服务的业务方法。Struts2支持校验特定方法的validateXxx()方法。例如某个Action中有一个save()业务方法,我们可以写一个validateSave()方法来进行save()的特殊校验,客户端请求调用的次序如下:
validateSave()--------------àvalidate()------------àsave()
Struts2的输入校验流程如下:
1. 类型转换器负责对字符串的请求参数执行类型转换,并将这此值设置成Action的属性值。
2. 在执行类型转换器过程中可能出现异常,如果出现异常,将异常信息保存到ActionContext中,conversionError拦截器负责将其封装到fieldError里,然后执行第3步;如果转换过程没有异常信息,则直接进入第3步。
3. 通过反射嗲用validateXxx()方法,其中Xxx是即将处理用户请求的处理逻辑所对应的方法名。
4. 通过Action类里的validate()方法
5. 如果经过上面4步都没有出现fieldError,将调用Action里处理用户的处理方法;如果出现了fieldError,系统将转入input逻辑视图所指定的视图资源。
二、Struts2输入检验
1. 最基础的Struts输入检验
Struts2中单独对每一个Action指定一个校验文件,它的命名方式ActionName-validate.xml。他存放在与Action相同的保重,校验只需要配置一个校验文件即可实现。系统的其他地方不需要改动,系统自动加载该文件。校验PersonAction-validate.xml如下例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!--校验文件的根元素-->
<validators>
<!--校验Action的username属性-->
<field name="username">
<!--指定username属性必须满足必填规则-->
<field-validator type="requiredstring">
<!--校验去掉username属性的前后空格-->
<param name="trim">true</param>
<!--提示信息-->
<message>用户名不能为空!</message>
</field-validator>
</field>
<field name="mobile">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>手机号不能为空!</message>
</field-validator>
<!—指定手机号必须满足匹配指定的正则表达式-->
<field-validator type="regex">
<param name="expression"><![CDATA[^1[358]\\d{9}$]]></param>
<message>手机号格式不正确!</message>
</field-validator>
</field>
</validators>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd"> <!--校验文件的根元素--> <validators> <!--校验Action的username属性--> <field name="username"> <!--指定username属性必须满足必填规则--> <field-validator type="requiredstring"> <!--校验去掉username属性的前后空格--> <param name="trim">true</param> <!--提示信息--> <message>用户名不能为空!</message> </field-validator> </field> <field name="mobile"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>手机号不能为空!</message> </field-validator> <!—指定手机号必须满足匹配指定的正则表达式--> <field-validator type="regex"> <param name="expression"><![CDATA[^1[358]\\d{9}$]]></param> <message>手机号格式不正确!</message> </field-validator> </field> </validators>
上面的配置文件的编写是对Action中所有的的方法进行了校验,如果想要对指定的Action中的方法进行校验,只要将将配置文件的命名改为ActionName-xxx-validate.xml即可。
2. Struts2中输入校验提示信息的国际化
在Struts2的校验中应用国际化也非常简单,请看如下xml配置代码
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key=”username.requied”> </message>
</field-validator>
</field>
<field name="mobile">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>手机号不能为空!</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[^1[358]\\d{9}$]]></param>
<message key=”mobile.regex”> </message>
</field-validator>
</field>
<span style="font-family: Arial; background-color: rgb(255, 255, 255);"></span>
<field name="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message key=”username.requied”> </message> </field-validator> </field> <field name="mobile"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>手机号不能为空!</message> </field-validator> <field-validator type="regex"> <param name="expression"><![CDATA[^1[358]\\d{9}$]]></param> <message key=”mobile.regex”> </message> </field-validator> </field>
Message元素指定key属性指定的是国际化资源中对应的key。还可以使用一下配置国际化资源中的信息:<message>${getText(“username.requried”)}</message>这种方式是通过调用ActionSupport类中getText()方法来获取国际化资源的。
3、 Struts2中应用客户端输入校验
使用客户端输入校验可以减轻服务器的负担。 Struts2 对客户端的输入校验进行了封装,使得我们开发时特别容易。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册页面</title>
</head>
<body>
<s:form action="save" validate="true">
<s:textfield label="用户名" name="name"></s:textfield>
<s:password label="密码" name="pass"></s:password>
<s:textfield label="年龄" name="age"></s:textfield>
<s:textfield label="生日" name="birth"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
<span style="font-family: Arial; background-color: rgb(255, 255, 255);"></span>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>注册页面</title> </head> <body> <s:form action="save" validate="true"> <s:textfield label="用户名" name="name"></s:textfield> <s:password label="密码" name="pass"></s:password> <s:textfield label="年龄" name="age"></s:textfield> <s:textfield label="生日" name="birth"></s:textfield> <s:submit></s:submit> </s:form> </body> </html>
注意这里要用Struts2的标签,form的validate属性要设置为true,并且不要将theme属性指定为simple(simple表示struts2将把这个解析成普通的HTML标签)
2.校验配置文件:这里的校验配置文件同原先的配置文件并没有不同,但是这里使用<message key=”name.requried”/>无法从全局国际化资源中获取信息,只能使用<message>${getText(“name.requried”)}</message>方式获取国际化资源。
在Struts2中并不是所有的服务器端校验都可以转换成客户端校验。客户端校验仅仅支持如下校验器:
required validator 必填校验器
requiredstring validator 必填字符串校验器
stringlength validator 字符串长度校验器
regex validator 正则表达式校验器
email validator 邮件校验器
url validator 网址校验器
int validator 整数校验器
double validator 双精度数校验器 。
三、多个校验器规则文件的搜索次序
例如有一个 LoginAction 继承 BaseAction ,这两个 Action中都有业务方法 login ,并且存在 4 份校验规则文件如下: BaseAction-vadition.xml, BaseAction-login-validation.xml , LoginAction-validation.xml, LoginAction-login-validation.xml 那么用户访问 LoginAction 的 login 方法里,会按照以上的顺序执行校验规则,实际的校验规则是以上四个校验规则的总和,但是如果存在冲突的情况下,后面的校验规则优先。
四、短路校验器的配置
Struts2 默认的校验配置是非短路的方式,即把一个字段所有的不符合要求的提示都提示用户,我们也可以配置以短路的方式提示用户,即当用户输入的条件不满足第一次校验的时候就返回提示信息,不再往下执行。这种配置方式只能是以字段为基础的校验器。只需要在 <field-validator> 元素上加上 short-circuit="true" 即可,例如:
<field name="name">
<field-validator type="requiredstring" short-circuit="true">
<param name="trim">true</param>
<message>${getText("name.requried")}</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{4,25})]]></param>
<message>${getText("name.regex")}</message>
</field-validator>
</field>
相关文章推荐
- struts2自定义方法的输入校验
- Struts2学习教程之输入校验示例详解
- 使用Struts2的输入校验(三)--短路校验器
- Struts2输入校验之用校验框架校验
- struts2输入校验完整解析222222
- Struts2输入校验(一)配置文件校验
- Struts2输入校验总结
- struts2(七)输入校验
- 使用struts2的输入校验
- Struts2输入校验
- jsp struts2 学习(七) ----- 输入校验
- struts2输入校验
- 六、Struts2之输入校验
- Struts2中的输入校验使用正则因正则中含有空格导致报错
- Struts2输入校验总结
- 关于Struts2基于验证框架的输入校验的经验
- Struts2输入校验(二)非配置文件校验
- struts2对action中的方法进行输入校验---xml配置方式(3)
- Struts2输入校验总结
- Struts2 对Action中所有方法进行输入校验、单个方法进行校验