`
peonyzzdx
  • 浏览: 592042 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

struts2校验(二):声明式验证(基于xml配置验证)(2)

    博客分类:
  • J2EE
 
阅读更多
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>为根元素;
字段型校验器是以属性为单位的,内容模板:

<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
分享到:
评论

相关推荐

    struts2官方例子7-表单验证 xml形式的验证

    Struts2提供了两种主要的验证方式:基于注解的验证和基于XML的验证。本例子主要关注XML形式的验证。 XML验证的优点在于其灵活性和可读性。开发者可以在Action类旁创建一个与Action类同名的.xml文件,比如Action类名...

    Struts2 校验器

    Struts2的校验框架是基于Apache Commons Validator库的,它允许开发者定义一系列的验证规则来检查用户的输入。这些规则可以是简单的数据类型检查,如非空、长度限制,也可以是复杂的业务逻辑校验。校验过程通常分为...

    Struts2校验框架应用

    本文将深入探讨Struts2校验框架的应用,包括其核心概念、配置方式、以及如何在实际项目中实现数据验证。 **1. Struts2校验框架基础** Struts2的校验框架是基于Apache Commons Validator库的,它允许开发者定义校验...

    Struts2输入校验总结

    综上所述,Struts2的输入校验机制不仅支持基本的手动校验,还提供了高度可配置和扩展的验证框架,使得开发者能够根据应用的具体需求,灵活地实现各种校验逻辑,从而提升应用程序的质量和用户体验。

    struts2校验器_xml格式

    2. **配置Action类**:在Struts2的配置文件(通常为`struts.xml`)中,需要指定Action类对应的验证XML文件,这样框架在处理表单提交时会自动应用这些验证规则。 ```xml 该字段是必填的。 ``` ...

    Struts2 part6:数据校验

    1. **配置验证规则**:Struts2提供了多种方式定义验证规则,如XML配置文件、注解或者自定义拦截器。XML配置文件中,可以在`struts.xml`或对应的action配置中定义`&lt;validators&gt;`标签来添加校验规则。注解方式更直观,...

    struts2输入校验

    Struts2提供了内置的验证框架,基于XML配置或者注解实现。这个框架允许开发者定义一组规则来检查用户提交的数据,这些规则可以在Action类中应用。 2. **XML输入校验**: - **创建校验文件**:首先,你需要创建一...

    struts2校验框架使用心得.txt

    #### 二、配置Struts2框架 为了使用Struts2框架,首先需要在项目的`web.xml`文件中配置过滤器。下面的示例展示了如何添加Struts2过滤器: ```xml &lt;filter-name&gt;struts2 &lt;filter-class&gt;org.apache.struts2....

    struts2中的输入校验

    - **XML配置文件**:Struts2支持基于XML的校验配置文件,分为局部校验配置文件和全局校验配置文件。局部校验文件针对单个Action类,而全局校验文件适用于整个应用。配置文件内容包括字段校验(field validation)和...

    struts2校验器与校验框架精彩学习笔记

    它基于XML配置,通过在Action类中定义校验规则,可以方便地集成到Struts2的应用中。校验框架的工作流程大致分为以下几个步骤: 1. **配置校验规则**:在struts.xml或相应的Action配置文件中,定义校验规则。例如,...

    Struts2的输入校验

    Struts2提供了强大的验证框架,支持多种验证方式,包括基于注解的验证、XML配置的验证以及编程式验证。这些验证规则可以定义在Action类中,或者单独的验证配置文件里。 1. **基于注解的验证** 使用注解是Struts2中...

    Struts 2权威指南:基于WebWork核心的MVC开发

    - **Struts 2**:基于WebWork核心开发而成,Struts 2在Struts 1的基础上进行了大量的改进,如更灵活的配置方式、丰富的标签库、强大的拦截器机制等,同时保留了WebWork的优点,如类型转换和校验功能等。 #### 5. ...

    struts2 校验框架

    - Struts2的校验功能基于拦截器机制,`ValidationInterceptor`负责在Action执行前进行数据验证。如果验证失败,Action的执行会被中断,用户会收到错误信息。 8. **AJAX校验**: - Struts2可以与jQuery等...

    struts2基于xml验证(最常用的三种类型String、Date、int验证).doc

    在探讨Struts2框架中的XML验证机制时,我们聚焦于三种最常见的数据类型验证:String、Date、int。这些验证在Web应用开发中至关重要,确保了数据的完整性和正确性,从而提高了应用程序的健壮性和用户体验。 ### 一、...

    struts2验证框架简单实例

    首先,Struts2的验证框架主要基于两个组件:`Validation`和`Validator`。`Validation`是Action类的注解,而`Validator`则处理验证逻辑。通过在Action类的字段上添加`@Validated`注解,可以启用字段级别的验证。此外...

    struts2输入校验深入总结

    Struts2集成了Apache Commons Validator,可以通过配置XML文件定义校验规则。在struts.xml文件中配置`&lt;validators&gt;`元素,然后在Action类中创建一个ValidatorForm对象,将表单字段映射到该对象的属性,即可应用预...

    Struts2自定义校验框架

    - XML配置:在`struts.xml`或相应的Action配置文件中,使用`&lt;validators&gt;`标签定义自定义校验器,通过`&lt;field-validator&gt;`指定需要应用该校验器的字段。 - 注解配置:在Action类的属性上使用自定义注解,通过注解...

    struts2校验器

    Struts2的校验框架基于Apache Commons BeanUtils和Validator组件,它提供了一种声明式和编程式的验证方式。声明式验证通常通过XML配置文件进行,而编程式验证则允许开发者在Action类中直接编写代码进行验证。这两种...

Global site tag (gtag.js) - Google Analytics