strut2 学习之验证框架一介绍



学习struts2也有很长一段时间了,虽然对它也研究了不少,但是很少记下来,今天终于决定记下来了,这是关于struts2的验证框架.主要是翻译的官方文档,以及在学习及工作的使用心得.



我们可以使用XML文件和注解的方式来使用验证框架,当然我们还可以在Action中结合自己的代码使用.这个框架需要validation和workflow这两个拦截器和拦截器,这两个拦截器都已经在defaultStack中配置了.validation验证之后,如果有不通过的情况下,会创建相应的属性error,workflow 将检查是否有错误,如果有错误,将返回默认的input result,将用户带回到相应的输入界面.

如果我们使用了默认配置,没有配置input result ,并且有验证错误(偶然还有类型转换错误),那么我们将得到一个错误消息---there's no "input" result defined for the action.

注册验证器

validation 利用的是validator 验证器来进行验证的,因此我们需要将验证器注册到ValidatorFactory(通过registerValidator 方法),最简单的方法是在web-inf/classes下添加一个validators.xml文件,将我们需要的验证器都添加进来.

下面的这些验证器是struts2已经注册的,如果我需要添加自己的验证器,可以照这个例子进行添加.

validators.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator Definition 1.0//EN"
        "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">

<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>

注意:如果是Struts 2.0.7 和之前的版本,则我们在自己定义验证器的同时,还要将默认的这些验证器也复制进来.


打开验证功能

默认的拦截器栈 defaultStack已经配置了validation拦截器,如果我们自己定义拦截器栈的话,则需要将validation 和workfolw两个拦截器加进来.
struts-default.xml中定义的 :
<interceptor-stack name="defaultStack">
   ...
   <interceptor-ref name="validation">
      <param name="excludeMethods">input,back,cancel,browse</param>
   </interceptor-ref>
   <interceptor-ref name="workflow">
      <param name="excludeMethods">input,back,cancel,browse</param>
   </interceptor-ref>
</interceptor-stack>

2.0.4版本开始,struts2提供了一个继承自com.opensymphony.xwork2.validator.ValidationInterceptor的拦截器
<interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>
 这个拦截器可以让我们使用注解   @org.apache.struts2.interceptor.validation.SkipValidation来忽略验证action的某个方法.

验证器的作用范围

Field validators --- 故名思义,这个验证器作用在action 的某个属性上.验证器能够在整个action 的上下文中生效,能涉及到action的一个属性或多个(或者根本没有),大多数的验证器都能在属性的基础上定义.我们应尽可能使用这种验证器,因为属性验证信息可以绑定到相应的属性上,并且将会传递到视图中相应的表单元素中.
Non-field validators --- 非属性的验证器只能添加action级别的信息,表达式验证器是最重要的验证器,这个验证已经在xwork中提供了.

注意:
   非属性的验证器优先于属性验证器,并且忽略在*-validation.xml中的定义顺序.如果一个非属性的验证器短路,则将导致属性验证器失效.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值