详解Struts中Validator验证框架的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解Struts中Validator验证框架的使用相关的知识,希望对你有一定的参考价值。

参考技术A

  Validator框架已成为Jakarta的公共项目的一部分 可以从下载单独的Validator框架 在Struts中已经带了这个框架

  Validator主要依赖两个jar包

   Jakarta oro jar -提供一组处理文本的类 具有文本替换 过滤 和分割功能

   Commons validator jar 提供了一个简单 可扩展的验证框架 包含了通用的验证方法和验证规则

  在用Struts中用这个框架 需加入这两个包 用起来感觉还不错

  下面介绍一下

  Validator采用基于两个xml文件的方式来配置验证规则 分别为validation xml validator rules xml 在struts应用中 需放到web inf目录下

   .validator rules xml

  这个文件包含了一组验证规则 对所有struts应用都适用 一般情况不用修改这个文件 除非要修改或扩展默认规则 如果要给应放到另一个xml文件中 而不是直接添加到validator rules xml文件中 这样当Validator升级时 不用修改validator rules xml文件

   .validator xml文件

  这个文件是针对于具体struts应用的 他可以为应用中的ActionForm配置验证规则 而不用编码实现验证

  例如一个验证登陆form的例子 要求用户名必须填写 秘密要求必填 最大 最小长度及其内容的要求

   代码

   <form validation>       <global>           <! 密码由数字 个英文字母或者下划线组成的字符串  >           <constant>               <constant name>pwd</constant name>               <onstant value>^\\w+$</onstant value>           </constant>       </global>       <formset>           <form name= loginForm >               <! 这里的用户名使用邮箱 验证时使用正则表达式进行验证 >               <field property= user userId depends= required >                   <arg key= user userId />               </field>               <field property= user userPwd depends= required minlength maxlength mask >                   <! msg name= mask key= errors invalid / >                   <arg key= user userPwd />                   <arg name= minlength key= $var:minlength resource= false />                   <arg name= maxlength key= $var:maxlength resource= false />                   <var>                       <var name>mask</var name>                       <var value>^\\w+$</var value>                   </var>                   <var>                       <var name>minlength</var name>                       <var value> </var value>                   </var>                   <var>                       <var name>maxlength</var name>                       <var value> </var value>                   </var>               </field>           </form>       </formset>   </form validation>

  validator xml和validator rules xml文件的语法不在这里说明

   Validator插件

  为了在struts中用validator 可以用插件方式加载Validator框架 需在struts配置文件中配置ValidatorPlugIn插件 同时写明两个xml文件的路径

  应用启动时 Strust会加载这个插件 并调用他的init()方法 init()方法根据pathnames加载

  相应的validator xml validator xml文件 把验证信息读入到内存中

  代码

  

   <plug in className= apache struts validator ValidatorPlugIn > <set property value= /WEB INF/validator rules xml /WEB INF/validation xml property= pathnames /> </plug in>

   .Validator和ActionForm

  Validator框架不能直接 apache struts action ActionForm 应采用ActionForm的两个子类

  ValidatorActionForm和ValidatorForm

  DynaValidatorActionFrom继续自DynaValidatorForm

  支持动态在ActionFrom中使用Validator框架

  ValidatorFormActionForm继承ValidatorForm

  支持在标准ActionForm中使用Validator框架

  DynaValidtaorForom和ValidatorForm类都实现了validator()方法 如果验证失败 就会返回包含错误消息的ActionMessage对象 并把该对象添加到ActionErrors集合对象中 由validator方法最后返回ActionErrors对象

  ValidatorForm有一个子类ValidatorActionForm

  ValidatorForm

  Strust配置文件的元素的name属 >validator xml文件

元素的name属性

  ValidatorActionForm

  Strust配置文件的元素的path属 >validator xml文件元素的name属性

  Validator框架提供这两个类目的在于可以更加精确的控制执行验证的条件

  例如

  loginForm表单对应两个验证规则A B 对应login cancel两个动作

  如果对于这两个动作都要执行规则A B 则可以扩展一个ValidatorFom类loginForm然后配置

  代码

  

   <formset> <form name= loginForm > 验证规则A 验证规则B </form> … </formset>

  如果对于用户的login动作 执行规则A 对于cancel动作执行B规则 则可以扩展一个ValidatorActionFom类

  loginForm

  然后配置

  代码

  

   <formset> <form name= login > 验证规则A </form> <form name= cancel > 验证规则B </form> </formset>

  而DynaValidatorForm和DynaValidatorActionForm 区别和ValidatorFrom和ValidatorActionForm的区别一样

   .在validator框架中使用javascript

  默认情况下 validator框架在服务器端执行表单验证 也可以在客户端验证

  如果在客户端验证 需要使用struts的 <:javascript> 标签 他能在jsp页面中生成用于客户端验证

  的JavaScript的脚本

   ) 在validator-rules xml文件的 元素中配置 元素默认struts框架的validator-rules xml文件已经包含了javascript子元素 也可以将这些javascript集中放到一个validator js的文件中 也页面中引入代码

  < script language= Javascript src= js/validator js >< /script>

   ) 在Jsp页面中包含< :javascript>

  < :javascript formName= loginForm > 这个标签的form的name属性制定需要验证的表单名字

  他能够访问为表单配置的验证规则的javascript元素 把包含的脚本写到jsp页面中 生成validateLoginForm的函数 负责执行验证逻辑

   ) 对需要验证的表单定义onsubmit事件

   )代码

  < :form action= manageContract do onsubmit= return validateContractForm(this); >

   ) 用户在表单上提交后 就会调用 <:javascript>

  标签生成的js脚本validateLoginForm函数 执行验证 如果验证失败 就会弹出对话框提示

  不会提交的服务器端

  小结

  使用步骤

   ) 创建扩展ValidatorForm或ValidatorActionForm类的ActionForm 如果使用动态ActionForm

  则不用扩展DynaValidatorForm或DynaValidatorActionForm类的子类 可以直接进行第二步

   ) 在struts文件中配置form和action元素

   ) 把validator框架使用的文本信息添加到应用的Resource Bundle中

   ) 代码

  < message resources parameter= web ApplicationResources />

   ) 在validatorxml文件中为表单配置验证规则

   ) 在struts配置文件中配置validatorPlugIn插件

  代码

  

   <plug in className= apache struts validator ValidatorPlugIn > <set property value= /WEB INF/validator rules xml /WEB INF/validation xml property= pathnames /> </plug in>

lishixinzhi/Article/program/Java/ky/201311/27918

struts2学习笔记--使用Validator校验数据

我们在进行一些操作是需要对用户的输入数据进行验证,比如网站的注册,需要对各个数据项进行数据校验,Struts2提供了一些默认的校验器,比如数字的检测,邮箱的检测,字符串长度的检测等等.

 

  •   常用的Validator

校验器 作用
 required  必填校验器,要求字段必须有值
 requiredstring

必填字符串校验器,要求必须有值且长度大于0,即不能是空字符串。默认会去掉字符串前后空格

  参数fieldName:该参数指定校验的字段名称,如果是字段校验,则不用指定该参数

      参数trim:该参数为可选参数,用于指定是否在校验之前对字符串进行整理。

stringlength

字符串长度校验器,用于检验字段中字符串长度是否在指定的范围

   参数 maxLength:用于指定最大字符串长度,该参数为可选

       参数 minLength:用于指定最小字符串长度,该参数为可选

 int 

整数校验器,可以配置整数在指定的范围内

  参数 min:指定字段值的最小值,该参数为可选

      参数 max:指定字段值的最大值,该参数为可选

date

日期校验器,可以配置日期在指定的范围内

      参数 min:指定字段日期值的最小值,该参数为可选

      参数 max:指定字段日期值的最大值,该参数为可选

email

邮件地址校验器,要求被检查的字段如果非空,则必须是合法的邮件地址。

regex    

检查是否能匹配到正则表达式,参数为regex

使用struts2的验证框架的要求:

  在对应的action的包下添加一个验证框架的配置文件,文件名称为Action类名-validation.xml.如果Action中有多个方法,则一般使用Action类名-Action别名-validation.xml.例如LoginAction-addUser-validation.xml.

  特别需要注意的是:支持校验的Action必须实现Validateable接口,一般继承ActionSupport类就可以了.

  下面写一个简单的用户注册的demo来使用一下Validator,在web项目下新建一个注册的jsp文件,名为regist.jsp,引入ognl标签库,body部分代码为:

<body>
     <s:fielderror></s:fielderror>
     <s:form action="user/regist.action" validate="true">
             用户名:<input type="text" name="user.name"/><br>
               密码:<input type="password" name="user.password"/><br>
               出生日期:<input type="text" name="user.date"/><br>
               电子邮箱:<input type="text" name="user.email"/><br>
               <input type="submit" value="注册"/>
     </s:form>
  </body>

entity包下新建一个user实体类,代码省略.

action包下新建一个RegistAction,继承ActionSupport类,代码省略.

action包下新建一个RegistAction-validation.xml,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
         "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
        <validators>
               <field name="user.name">
                   <field-validator type="requiredstring">
                       <param name="trim">true</param>
                       <message>用户名不能为空</message>
                   </field-validator>
                   <field-validator type="stringlength">
                       <param name="trim">true</param>
                       <param name="maxLength">10</param>
                       <param name="minLength">4</param>
                       <message>用户名长度必须介于4到10之间</message>
                   </field-validator>
               
               </field>
               <field name="user.birthday">
                   <field-validator type="date">
                       <param name="min">1900-01-01</param>
                       <param name="max">2016-01-01</param>
                       <message>日期不满足要求</message>
                   </field-validator>
               </field>
               <field name="user.email">
                   <field-validator type="email">
                       <param name="trim">true</param>
                       <message>邮箱格式不满足要求</message>
                   </field-validator>
               </field>
        </validators>

struts.xml内配置action:

<package name="user" namespace="/user" extends="struts-default">
        <action name="regist" class="com.wang.action.RegistAction" >
            <result>/index.jsp</result>
            <result name="input">/register.jsp</result>
        </action>
    </package>

  如果检验失败,会转到input页面显示错误信息,因此action配置中必须要有一个名为input的jsp页面.运行之后,如果输入不符合要求的数据则会在浏览器提示出来.

  我在写这个demo时碰到一个问题,因为使用了ognl标签,在输入url访问regist.jsp页面时,报了一个错误:

The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]

  后来将web.xml的url-pattern中的*.action改为/*就解决了.据说还有一种方式是不改变上面配置,只需要增加一个url-pattern为*.jsp即可,待检验.

 

以上是关于详解Struts中Validator验证框架的使用的主要内容,如果未能解决你的问题,请参考以下文章

struts2校验框架中各个验证器param的值

Struts1.x 中的 Validate 框架

后台验证及struts2表单验证里field-validator type值的含义?

struts2学习笔记--使用Validator校验数据

struts2学习笔记--使用Validator校验数据

struts2表单验证里field-validator type值一共可以取哪些?都什么含义?