天天看点

Struts2声明式验证

声明式验证步骤

一 、编写action类

二、在struts.xml中配置该action

三、编写验证规则的配置文件

 去struts2-blank\web-inf\src\java\example 下找到 login-validation.xml  复制 然后重命名

命名必须为   必须放置在action类的同目录下

<actionclassname>-validation.xml 

<actionclassname>-<actionaliasname>-validation.xml 

其中<actionaliasname>就是struts.xml中<ation>的name属性值。

本例子 为 checkaction-validation.xml

一个action类可以应答多个action请求 ,多个action 请求使用不同的验证规则 怎么办?

解决方案

        为每个不同的action请求 定义其对应的验证文件:actionclassname-aliasname-

        validation.xml不带别名的配置文件:actionclassname-validation.xml

        中的验证规则依然会起作用 可以吧各个action公有的验证规则配置在其中 但需要注意的是

        只适应于某一个action的请求的验证规则就不要再这里

        配置了

如下图

Struts2声明式验证
Struts2声明式验证
Struts2声明式验证

字段验证

字段校验器配置格式:

<field name="被校验的字段">

       <field-validator type="校验器名">

             <!--此处需要为不同校验器指定数量不等的校验规则-->

              <param name="参数名">参数值</param>

                  ....................

               <!--校验失败后的提示信息,其中key指定国际化信息的key-->

                <message key="i18nkey">校验失败后的提示信息</message>

                 <!--校验失败后的提示信息:建议用gettext("i18nkey"),否则可能出现freemarker template error-->

       </field-vallidator>

        <!-- 如果校验字段满足多个规则,下面可以配置多个校验器-->

</field>

非字段验证

非字段校验器配置格式:

<validator type="校验器名">

          <param name="fieldname">需要被校验的字段</param>

          <!--此处需要为不同校验器指定数量不等的校验规则-->         

<param name="参数名">参数值</param>

            <!--校验失败后的提示信息,其中key指定国际化信息的key-->

         <message key="i18nkey">校验失败后的提示信息</message>

           <!--校验失败后的提示信息:建议用gettext("i18nkey"),否则可能出现freemarker template error-->

</validator>

(1)字段校验代码,例如下面的代码:

xml代码

    <field name="....">  

      <field-validator type="..."></field-validator>  

    </filed>  

(2)非字段校验代码,例如下面的代码:

    <validators>  

        <validator type="required">  

            <param name="fieldname">username</param>  

            <message>用户名必须填写</message>  

        </validator>  

    </validators>  

   struts2的校验大部分是围绕action组件的字段属性来实现的,主要是判断某个字段属性的输入是否有效,因此又把这种内置的校验器成为字段校验器。还有一种校验器它不是针对某个字段,而是针对多个字段的输入值之间的逻辑关系进行校验,典型的例子是再次输入密码的判断。内置的expression校验器就是一种非字段校验器。

    <validator type="expression">  

            <param name="expression"><![cdata[(password==repassword)]]></param>  

            <message>两次输入的密码必须完全一致!</message>  

        </validator> 

 非字段校验:先指定校验器:由谁来校验,来校验谁!

字段校验器:先指定校验的属性:我来校验谁,由谁来校验!

短路验证

加  short-circuit="true"  表示当前验证器没有通过后 直接返回input视图 不会验证后面的验证器