- 浏览: 590629 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
zhanghao1785:
jQuery jqGrid中ColModel的参数大全 -
haiyangyiba:
在实际应用中,回车提交一般需要注意的是,多次回车之间的间隔,换 ...
回车自动提交 -
fengkuangxiao6:
快捷键能写的这么详细,太棒了!
Eclipse中10个最有用的快捷键组合 -
Frank_Sun:
我的jdk版本是1.6.0.29,在finally中加retu ...
try catch finally与return的执行顺序 -
jueyue:
这个注解可以搞吗,感觉还不如放在前台
struts2校验(二):声明式验证(基于xml配置验证)(1)
Struts2校验框架的本质
展开xwork-2.0.4.jar中的com.opensymphony.xwork2.validator.validators包里面发现有很多的校验类
因此,我们知道,我们现在所使用的这种校验框架,实际上就是由Struts2已经给我们提供好的一些类
这些类来校验客户端的表单的输入请求,这些类,这些校验,都是由Struts2已经内置好的了,我们可以直接使用
然后打开包里面的default.xml文件,就可以知道<field-validator>中type是取值于default.xml文件的
expression和fieldexpression都是用于OGNL表达式的判断,分别返回Action级别和Field级别的错误
conversion用于格式转换出现错误时的判断。stringlength判断字符串长度。regex用于正则表达式的判断
struts的validate框架验证流程
(用配置xml文件进行验证、基于验证框架的输入校验)
1. 编写校验配置文件:命名规则:action类名-validatin.xml.
2. 一个action对应多个逻辑处理方法:指定校验某个特定方法的方式:
<ActionClassName>-<ActionAliasName>-validation.xml 其中<ActionAliasName>就是struts.xml中<ation>的name属性值
3. 配置文件存放位置:和action文件同目录
4. 验证规则:先加载action类名-validatin.xml,然后加载action类名-name属性名-validatin.xml文件。
5. 校验器的配置风格:两种:字段校验器,非字段校验器。
Action配置中一定要设置input返回页面 ,添加验证只要创建验证的xml文件
-1-.创建xml文件名
验证Action中全部方法
在Action同包下,创建:ActionClassName-validation.xml (要和需要校验的Action放在同一目录下)
验证Action中单个方法
ActionClassName-ActionAliasName-validation.xml
-2-在不需要进行验证的方法加上annotation,即在方法前加上@SkipValidation。
<1>. 导入SkipValidation类
import org.apache.struts2.interceptor.validation.SkipValidation;
<2>. 在不需要验证的方法前使用标注@SkipValidation忽略验证,如:
@SkipValidation
public String beforeAdd(){
return "beforeSave";
}
-3- <action name=...>
<interceptor-ref name="defaultStack">
<param name="validation.excludeMethods">*</param>
<param name="validation.includeMethods">需要验证的方法名称,以逗号分隔</param>
</interceptor-ref>
</action>
【字段校验】
---- field-validator
---- 字段优先,我去校验谁(字段),我用谁(校验器)来校验
数据校验文件以<validators>为根元素;
字段型校验器是以属性为单位的,内容模板:
【非字段校验】
---- validator
---- 校验器优先,我用谁(校验器)来校验,我去校验谁(字段)
非字段型校验器是以校验器为单位的,内容模板:
****** 这两种只是 表现形式不同,底层是相同的,都是把错误信息放到fielderror中
字段校验和非字段校验代码示例参见http://deony2jacob1314.iteye.com/blog/1874772
短路校验,在字段校验或者非字段校验中加入:short-circuit="true",如果某个被标记为短路的校验器失败了,将会阻止其他后续的校验器的进行,然后一个错误(action错误或者字段错误,取决于校验器的类型)将会被添加到被校验的对象的ValidationContext中:
在上面的例子中,实际的校验器执行是这样的:
Plain Validator 1
Plain Validator 2
email字段的字段校验器
email2字段的字段校验器
因为普通校验器2是短路的,如果它的校验失败,它会导致email字段的校验器和email2字段的校验器不会被执行.
短路校验器的规则:
1.当非字段校验器校验失败,则其后的所有字段校验器都不会执行,而不会影响其他非字段校验器;
2.字段校验器校验失败时,其后的所有字段校验器都不会执行;
(当执行到短路,报错时,后面的字段校验器不再执行,不影响非字段校验器)
校验器的运行顺序
1.非字段校验器比字段校验器先执行;
2.从前往后执行;
验证嵌套属性
有一类特殊的属性,即这个属性的类型是另外一个JavaBean,如有一个User类,代码如下:
Java代码
在NewValidateAction类中加一个user属性,代码如下:
Java代码
如果要验证NewValidateAction中的user属性,可以使用visitor验证器。操作过程如下:
首先在NewValidateAction-validation.xml中加入一个<field>标签,代码如下:
Xml代码
其中context参数将作为验证User类属性的文件名的一部分,如user属性返回一个User对象,那么用于验证User对象属性的文件名为 User-abc-validation.xml。这个文件要和User.class文件在同一个目录中。appendPrefix表示是否在字段里加 user,如果为true,Struts2就会使用user.name在form提交的数据中查找要验证的数据。这个属性的默认值是true。如果出错, Struts2会将<message>标签中的信息加到User-abc-validation.xml文件中的相应错误信息前面。
User-abc-validation.xml文件的内容如下:
Xml代码
下面修改validate_form.jsp,代码如下:
Xml代码
注意:
1.如果内建校验器不满足要求,可以自定义校验器,重写validate()方法。
2.如果既有xml校验,又有validate()校验
将先校验xml,然后进行validate()校验(先validateXXX()再validate())
然后将所有的错误添加进fielderror
展开xwork-2.0.4.jar中的com.opensymphony.xwork2.validator.validators包里面发现有很多的校验类
因此,我们知道,我们现在所使用的这种校验框架,实际上就是由Struts2已经给我们提供好的一些类
这些类来校验客户端的表单的输入请求,这些类,这些校验,都是由Struts2已经内置好的了,我们可以直接使用
然后打开包里面的default.xml文件,就可以知道<field-validator>中type是取值于default.xml文件的
expression和fieldexpression都是用于OGNL表达式的判断,分别返回Action级别和Field级别的错误
conversion用于格式转换出现错误时的判断。stringlength判断字符串长度。regex用于正则表达式的判断
struts的validate框架验证流程
(用配置xml文件进行验证、基于验证框架的输入校验)
1. 编写校验配置文件:命名规则:action类名-validatin.xml.
2. 一个action对应多个逻辑处理方法:指定校验某个特定方法的方式:
<ActionClassName>-<ActionAliasName>-validation.xml 其中<ActionAliasName>就是struts.xml中<ation>的name属性值
3. 配置文件存放位置:和action文件同目录
4. 验证规则:先加载action类名-validatin.xml,然后加载action类名-name属性名-validatin.xml文件。
5. 校验器的配置风格:两种:字段校验器,非字段校验器。
Action配置中一定要设置input返回页面 ,添加验证只要创建验证的xml文件
-1-.创建xml文件名
验证Action中全部方法
在Action同包下,创建:ActionClassName-validation.xml (要和需要校验的Action放在同一目录下)
验证Action中单个方法
ActionClassName-ActionAliasName-validation.xml
-2-在不需要进行验证的方法加上annotation,即在方法前加上@SkipValidation。
<1>. 导入SkipValidation类
import org.apache.struts2.interceptor.validation.SkipValidation;
<2>. 在不需要验证的方法前使用标注@SkipValidation忽略验证,如:
@SkipValidation
public String beforeAdd(){
return "beforeSave";
}
-3- <action name=...>
<interceptor-ref name="defaultStack">
<param name="validation.excludeMethods">*</param>
<param name="validation.includeMethods">需要验证的方法名称,以逗号分隔</param>
</interceptor-ref>
</action>
【字段校验】
---- field-validator
---- 字段优先,我去校验谁(字段),我用谁(校验器)来校验
数据校验文件以<validators>为根元素;
字段型校验器是以属性为单位的,内容模板:
<validators> <field name=""> <field-validator type=""> <param name=""></param> <message></message> </field-validator> </field> </validators>
【非字段校验】
---- validator
---- 校验器优先,我用谁(校验器)来校验,我去校验谁(字段)
非字段型校验器是以校验器为单位的,内容模板:
<validator type=""> <param name="fieldName"></param> <param name=""></param> <message></message> </validator>
****** 这两种只是 表现形式不同,底层是相同的,都是把错误信息放到fielderror中
字段校验和非字段校验代码示例参见http://deony2jacob1314.iteye.com/blog/1874772
短路校验,在字段校验或者非字段校验中加入:short-circuit="true",如果某个被标记为短路的校验器失败了,将会阻止其他后续的校验器的进行,然后一个错误(action错误或者字段错误,取决于校验器的类型)将会被添加到被校验的对象的ValidationContext中:
<validators> <!-- Field Validators for email field --> <field name="email"> <field-validator type="required" short-circuit="true"> <message>You must enter a value for email.</message> </field-validator> <field-validator type="email" short-circuit="true"> <message>Not a valid e-mail.</message> </field-validator> </field> <!-- Field Validators for email2 field --> <field name="email2"> <field-validator type="required"> <message>You must enter a value for email2.</message> </field-validator> <field-validator type="email"> <message>Not a valid e-mail2.</message> </field-validator> </field> <!-- Plain Validator 1 --> <validator type="expression"> <param name="expression">email.equals(email2)</param> <message>Email not the same as email2</message> </validator> <!-- Plain Validator 2 --> <validator type="expression" short-circuit="true"> <param name="expression">email.startsWith('mark')</param> <message>Email does not start with mark</message> </validator> </validators>
在上面的例子中,实际的校验器执行是这样的:
Plain Validator 1
Plain Validator 2
email字段的字段校验器
email2字段的字段校验器
因为普通校验器2是短路的,如果它的校验失败,它会导致email字段的校验器和email2字段的校验器不会被执行.
短路校验器的规则:
1.当非字段校验器校验失败,则其后的所有字段校验器都不会执行,而不会影响其他非字段校验器;
2.字段校验器校验失败时,其后的所有字段校验器都不会执行;
(当执行到短路,报错时,后面的字段校验器不再执行,不影响非字段校验器)
校验器的运行顺序
1.非字段校验器比字段校验器先执行;
2.从前往后执行;
验证嵌套属性
有一类特殊的属性,即这个属性的类型是另外一个JavaBean,如有一个User类,代码如下:
Java代码
package data; public class User { private String name; private int age; public String getName() { returnname; } public void setName(Stringname) { this.name=name; } public int getAge() { return age; } public void setAge(intage) { this.age=age; } }
在NewValidateAction类中加一个user属性,代码如下:
Java代码
package action; import com.opensymphony.xwork2.ActionSupport; import data.User; public class NewValidateAction extends ActionSupport { private String msg; private int age; private User user; public String getMsg() { return msg; } public void setMsg(Stringmsg) { this.msg=msg; } public int getAge() { return age; } public void setAge(intage) { this.age=age; } public User getUser() { returnuser; } public void setUser(Useruser) { this.user=user; } }
如果要验证NewValidateAction中的user属性,可以使用visitor验证器。操作过程如下:
首先在NewValidateAction-validation.xml中加入一个<field>标签,代码如下:
Xml代码
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> …… <fieldname="user"> <field-validatortype="visitor"> <paramname="context">abc</param> <paramname="appendPrefix">true</param> <message>User:</message> </field-validator> </field> </validators>
其中context参数将作为验证User类属性的文件名的一部分,如user属性返回一个User对象,那么用于验证User对象属性的文件名为 User-abc-validation.xml。这个文件要和User.class文件在同一个目录中。appendPrefix表示是否在字段里加 user,如果为true,Struts2就会使用user.name在form提交的数据中查找要验证的数据。这个属性的默认值是true。如果出错, Struts2会将<message>标签中的信息加到User-abc-validation.xml文件中的相应错误信息前面。
User-abc-validation.xml文件的内容如下:
Xml代码
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <fieldname="name"> <field-validatortype="requiredstring"> <message>请输入name</message> </field-validator> </field> <fieldname="age"> <field-validatortype="int"> <paramname="min">5</param> <paramname="max">20</param> <message> 必须在5至20之间 </message> </field-validator> </field> </validators>
下面修改validate_form.jsp,代码如下:
Xml代码
<s:formvalidate="true"action="new_validate"namespace="/test"> <s:textfieldname="msg"label="姓名" /> <s:textfieldname="age"label="年龄"/> <s:textfieldname="user.name"label="姓名1" /> <s:textfieldname="user.age"label="年龄1"/> <s:submit/> </s:form> <s:submit/> </s:form>
注意:
1.如果内建校验器不满足要求,可以自定义校验器,重写validate()方法。
2.如果既有xml校验,又有validate()校验
将先校验xml,然后进行validate()校验(先validateXXX()再validate())
然后将所有的错误添加进fielderror
发表评论
-
spring 国际化
2013-06-09 15:03 307一、在src根目录下创建applicationContext. ... -
memcached(转)
2013-06-03 17:42 1068准备工作 下载安装并启动memcached-win32-1. ... -
Spring的任务调度服务实例讲解(二)
2013-06-03 16:18 112job的配置: applicationContext-job ... -
Spring三种bean注入方式
2013-06-03 15:06 185Spring中依赖注入有三种注入方式: 一、构造器注入; 二、 ... -
struts2 国际化
2013-05-30 10:13 151目录: 1. 国际化分类 ... -
struts2标签不显示Label的解决方法
2013-05-29 17:16 1185struts2标签不显示Label的解决方法 最近发现st ... -
struts2 标签 :<s:date> <s:debug >用法
2013-05-29 14:35 1521一、<s:date name="pop ... -
Struts2类型转换器(二)
2013-05-28 16:23 126Struts2之自定义类型转换器 Struts2自定义类型转 ... -
struts2的类型转换(一)
2013-05-28 16:17 132web应用类型的转换分为 ... -
类型转换与输入校验的流程
2013-05-27 11:27 953类型转换与输入校验的 ... -
struts2校验(二):声明式验证(基于xml配置验证)(1)
2013-05-24 17:48 4341声明式验证示例程序 下面将给出一个例子来演示如何使用Strut ... -
struts2校验(一):编程式验证(validate()验证)
2013-05-23 16:16 1687struts2支持三种验证方 ... -
struts2:struts.xml和struts.properties
2013-05-23 10:41 1141struts.xml文件主要负责管理应用中的Action映射, ... -
struts2 -- interceptor 拦截器
2013-05-22 13:57 1149一、理解Struts2拦截器 1. ... -
struts2 struts.xml使用通配符
2013-05-22 10:37 10495.4.1 使用通配符 前面学过,可以在定义<acti ... -
struts.xml配置详解
2013-05-22 09:35 1108struts.xml是我们在开发中利用率最高的文件,也是Str ... -
知识二(线程编程方面)
2013-05-09 16:04 1103[size=medium]1.实现线程的 ... -
struts2的json插件配置详解(附示例strutsJson)
2013-03-09 11:58 2405为了方便ajax调用传输数 ... -
Spring的scope="prototype"属性
2012-12-18 14:38 1493可以利用容器的scope="prototype&qu ... -
oracle如何取出查询结果中的某一条数据
2012-08-22 13:24 6664此为查询结果的最新的一条数据。 SELECT * FRO ...
相关推荐
Struts2提供了两种主要的验证方式:基于注解的验证和基于XML的验证。本例子主要关注XML形式的验证。 XML验证的优点在于其灵活性和可读性。开发者可以在Action类旁创建一个与Action类同名的.xml文件,比如Action类名...
Struts2的校验框架是基于Apache Commons Validator库的,它允许开发者定义一系列的验证规则来检查用户的输入。这些规则可以是简单的数据类型检查,如非空、长度限制,也可以是复杂的业务逻辑校验。校验过程通常分为...
本文将深入探讨Struts2校验框架的应用,包括其核心概念、配置方式、以及如何在实际项目中实现数据验证。 **1. Struts2校验框架基础** Struts2的校验框架是基于Apache Commons Validator库的,它允许开发者定义校验...
综上所述,Struts2的输入校验机制不仅支持基本的手动校验,还提供了高度可配置和扩展的验证框架,使得开发者能够根据应用的具体需求,灵活地实现各种校验逻辑,从而提升应用程序的质量和用户体验。
2. **配置Action类**:在Struts2的配置文件(通常为`struts.xml`)中,需要指定Action类对应的验证XML文件,这样框架在处理表单提交时会自动应用这些验证规则。 ```xml 该字段是必填的。 ``` ...
1. **配置验证规则**:Struts2提供了多种方式定义验证规则,如XML配置文件、注解或者自定义拦截器。XML配置文件中,可以在`struts.xml`或对应的action配置中定义`<validators>`标签来添加校验规则。注解方式更直观,...
Struts2提供了内置的验证框架,基于XML配置或者注解实现。这个框架允许开发者定义一组规则来检查用户提交的数据,这些规则可以在Action类中应用。 2. **XML输入校验**: - **创建校验文件**:首先,你需要创建一...
#### 二、配置Struts2框架 为了使用Struts2框架,首先需要在项目的`web.xml`文件中配置过滤器。下面的示例展示了如何添加Struts2过滤器: ```xml <filter-name>struts2 <filter-class>org.apache.struts2....
它基于XML配置,通过在Action类中定义校验规则,可以方便地集成到Struts2的应用中。校验框架的工作流程大致分为以下几个步骤: 1. **配置校验规则**:在struts.xml或相应的Action配置文件中,定义校验规则。例如,...
Struts2提供了强大的验证框架,支持多种验证方式,包括基于注解的验证、XML配置的验证以及编程式验证。这些验证规则可以定义在Action类中,或者单独的验证配置文件里。 1. **基于注解的验证** 使用注解是Struts2中...
- **Struts 2**:基于WebWork核心开发而成,Struts 2在Struts 1的基础上进行了大量的改进,如更灵活的配置方式、丰富的标签库、强大的拦截器机制等,同时保留了WebWork的优点,如类型转换和校验功能等。 #### 5. ...
- **XML配置文件**:Struts2支持基于XML的校验配置文件,分为局部校验配置文件和全局校验配置文件。局部校验文件针对单个Action类,而全局校验文件适用于整个应用。配置文件内容包括字段校验(field validation)和...
- Struts2的校验功能基于拦截器机制,`ValidationInterceptor`负责在Action执行前进行数据验证。如果验证失败,Action的执行会被中断,用户会收到错误信息。 8. **AJAX校验**: - Struts2可以与jQuery等...
在探讨Struts2框架中的XML验证机制时,我们聚焦于三种最常见的数据类型验证:String、Date、int。这些验证在Web应用开发中至关重要,确保了数据的完整性和正确性,从而提高了应用程序的健壮性和用户体验。 ### 一、...
首先,Struts2的验证框架主要基于两个组件:`Validation`和`Validator`。`Validation`是Action类的注解,而`Validator`则处理验证逻辑。通过在Action类的字段上添加`@Validated`注解,可以启用字段级别的验证。此外...
Struts2集成了Apache Commons Validator,可以通过配置XML文件定义校验规则。在struts.xml文件中配置`<validators>`元素,然后在Action类中创建一个ValidatorForm对象,将表单字段映射到该对象的属性,即可应用预...
- XML配置:在`struts.xml`或相应的Action配置文件中,使用`<validators>`标签定义自定义校验器,通过`<field-validator>`指定需要应用该校验器的字段。 - 注解配置:在Action类的属性上使用自定义注解,通过注解...
Struts2的校验框架基于Apache Commons BeanUtils和Validator组件,它提供了一种声明式和编程式的验证方式。声明式验证通常通过XML配置文件进行,而编程式验证则允许开发者在Action类中直接编写代码进行验证。这两种...