正文

Validator 验证 - 配置2007-03-13 10:58:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/hurongliang/23922.html

分享到:

要使用Validator验证框架,首先必须在struts-config.xml中指定plug-in元素。

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">

    <set-property property="pathnames"

                     value="/WEB-INF/validator-rules.xml,

                            /WEB-INF/validation.xml"/>

</plug-in>

 

 

 

 

 

 


pathnames指定你要使用的Validator配置文件。可以设置一个或多个。第一个validator-rules.xml定义

各个验证规则,第二个validation.xml定义了验证框架如何应用到你的应用程序中去。

一个好的方法是为应用程序的每个功能模块定义一个validation.xml。一个大型的应用程序可能有一大堆这样的文件

要使用验证框架的form bean ,如果是硬编码的formbean则必须继承org.apache.struts.action.ValidatorForm。如果是动态formbean则必须是org.apache.struts.action.DynaValidatorForm或它的字类。

下面一个实例验证MyLoginForm表单的usernamepassword字段是否为空,并限制password的最大值和最小值

 

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE form-validation PUBLIC

 "-//Apache Software Foundation//DTD Commons Validator Rules

 Configuration 1.1//EN"

 "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">

<form-validation>

    <formset>

        <form name="MyLoginForm">

            <field property="username"

                    depends="required">

                <arg key="prompt.username"/>

            </field>

            <field property="password"

                    depends="required, minlength,maxlength">

                <arg key="prompt.password"/>

                <arg key="${var:minlength}" name="minlength"

                   resource="false"/>

                <arg key="${var:maxlength}" name="maxlength"

                   resource="false"/>

                <var>

                    <var-name>maxlength</var-name>

                    <var-value>16</var-value>

                </var>

                <var>

                    <var-name>minlength</var-name>

                    <var-value>3</var-value>

                </var>

            </field>

        </form>

    <formset>

<form-validation>

form 元素中的name属性指定要验证的表单名而不是类。

 

 


如果formbean的类型为ValidatorActionForm DynaValidatorActionForm,则验证就和请求路径关联而不是formbean。当一个表单被提交到一个Action时,只有与路径对应的验证起作用。举例如下:

 

<form name="/ProcessStep1">

    <field property="username"

            depends="required">

        <arg key="prompt.username"/>

    </field>

</form>

<form name="/ProcessStep2>

    <field property="password"

            depends="required">

        <arg key="prompt.password"/>

    </field>

</form>

只有当struts-config.xmlaction元素的validate属性为true时才进行验证(validate默认值为true)。如果验证失败则Struts跳转到由action元素的input属性指定的位置。

<action    path="/Login"

           type="com.oreilly.strutsckbk.ch08.LoginAction"

          scope="request"

           name="MyLoginForm"

        validate="true"

          input="/login.jsp">

    <forward name="success" path="/login_success.jsp"/>

</action>

n   validation.xml中定义常量。

常量有两种:一种是全局范围常量。一种是某个formset范围的常量。位置如下:

form-bean à form-validation à global à constant

form-bean à form-validation à formset à constant

格式如下:

<form-validation>

    <global>

        <constant>

            <constant-name>globalVarName</constant-name>

            <constant-value>globalVarValue</constant-value>

        </constant>

    </global>

    <formset>

        <constant>

            <constant-name>formsetVarName</constant-name>

            <constant-value>formsetVarValue</constant-value>

        </constant>      

        <form name="MyForm">

            <field property="myfield"

                    depends="someRule,anotherRule">

                <var>

                    <var-name>someRule</var-name>

                    <var-value>${globalVarName}</var-value>

                </var>

                <var>

                    <var-name>anotherRule</var-name>

                    <var-value>${formsetVarName}</var-value>

                </var>

            </field>

        </form>

    <formset>

<form-validation>

如果你有多个field元素要用到同一个值,则可以定义一个这个值的常量,这样就可以应用这个常量了

如果这个常量作用于整个应用程序则生命为global范围的常量。如果这个常量只作用于某个特定的form且被重复使用,则的定义它为formset 范围的常量。举例如下:

<form-validation>

    <global>

        <constant>

            <constant-name>usernameMinLength</constant-name>

            <constant-value>7</constant-value>

        </constant>

    </global>

    <formset>

        <constant>

            <constant-name>nameMaxLength</constant-name>

            <constant-value>40</constant-value>

        </constant>      

        <form name="RegistrationForm">

            <field property="username"

                    depends="required,minlength">

                <arg key="prompt.username"/>

                <arg key="${var:minlength}" name="minlength"

                   resource="false"/>

                <var>

                    <var-name>minlength</var-name>

                    <var-value>${usernameMinLength}</var-value>

                </var>

            </field>

            <field property="firstName"

                    depends="required,maxlength">

                <arg key="prompt.firstName"/>

                <arg key="${var:maxlength}" name="maxlength"

                   resource="false"/>

                <var>

                    <var-name>maxlength</var-name>

                    <var-value>${nameMaxLength}</var-value>

                </var>

            </field>

            <field property="lastName"

                    depends="required,minlength,maxlength">

                <arg key="prompt.lastName"/>

                <arg key="${var:minlength}" name="minlength"

                   resource="false"/>

                <arg key="${var:maxlength}" name="maxlength"

                   resource="false"/>

                <var>

                    <var-name>minlength</var-name>

                    <var-value>2</var-value>

                </var>

                <var>

                    <var-name>maxlength</var-name>

                    <var-value>${nameMaxLength}</var-value>

                </var>

            </field>

        </form>

    <formset>

<formset-validation>

如果你使用mask验证规则严整表单的格式时,你只需要在一处定义这个格式的正则表达式。

阅读(2514) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册