Mr.Qiu’BlogJava

额滴javaBlog
随笔 - 2, 文章 - 2, 评论 - 0, 引用 - 0
数据加载中……

2008年4月3日

Struts的静态数据验证方法

   利用Struts的静态数据验证方法可以对用户在表单上输入的数据进行验证,包括数据类型是否正确、是否可空等。方法如下:

    1、在struts-config.xml文件中加入

         <message-resources parameter="ApplicationResources" />

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

           <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />

         </plug-in>

       其中parameter="ApplicationResources"意味着在java源代码根部,src/下有一属性文件ApplicationResources.properties,但为了能显示中文件信息

       src/下还应有文件ApplicationResources_zh_CN.properties 两文件最后打包到WEB-INF/classes下。

    2、利用开发工具在WEB-INF/下导入validator-rules.xmlvalidation.xml文件。这是有关验证规则及验证内容的配置文件。

    3、为表单属性加入中文说明,如有个formBean,名为form1,有三个属性,nameheightborn,分别是姓名、身高、出身日期

       ApplicationResources.properties文件中加入属性的解释说明:

           errors.integer={0} 必须为整型值,请注意编辑框内不能有空白字符串

           errors.date={0} 日期格式错误,应为 2004-03-23 2004-03-23 00:00:00.0 (00:00:00.0 为时::.毫秒)

           # form1

           form1.name.displayname=姓名

           form1.height.displayname=身高

           form1.born.displayname=出身日期

       第一、二行不是必须的,但有意义。

       打包前执行下列批处理 native2ascii ApplicationResources.properties ApplicationResources_zh_CN.properties,目的是由文件ApplicationResources.properties

       产生新文件ApplicationResources_zh_CN.properties,以便能正确显示汉字,这个新文件也在src/下。

    4、为了验证用户在填写表单时输入的数据,在validation.xml文件的<formset></formset>之间加入如下内容

          <form    name="form1">

             <field    property="name"

                     depends="required">

                       <arg0 key="form1.name.displayname"/>

             </field>

             <field    property="height"

                     depends="integer">

                       <arg0 key="form1.height.displayname"/>

             </field>

             <field    property="born"

                     depends="required,date">

                       <arg0 key="form1.born.displayname"/>

                         <var>

                           <var-name>datePatternStrict</var-name>

                           <var-value>yyyy-MM-dd</var-value>

                         </var>

             </field>

          </form>

    5、在jsp页面上,在</body>前加入strus标签:

          <html:javascript formName="form1" dynamicJavascript="true" staticJavascript="true"/>

    经过以上准备,不管是用struts<html:form></html:form>标签还是用newxy<nhtml:form></nhtml:form>标签,在客户端用户提交数据前都可以进行验证。

    但如果用struts<html:form></html:form>标签,应加入onsubmit事件,如:

          <html:form action="/myAction.do?method=update" onsubmit="return validateForm1(this);">

            ....

            <html:submit value=" 提交 " />

          </html:form>

posted @ 2008-04-03 11:55 Mr.Qiu 阅读(122) | 评论 (0)编辑 收藏

在struts中使用Validator框架

Validator验证框架
Validatro框架以成为Jakarta的公共项目的一部分,可以从http://jakarta.apache.org/commons/下载单独的Validator框架,在Struts中已经呆了这个框架。
Validator主要依赖两个jar包
Jakarta-oro.jar:-提供一组处理文本的类,具有文本替换、过滤、和分割功能。
Commons-validator.jar:提供了一个简单、可扩展的验证框架,包含了通用的验证方法和验证规则。

在用Struts中用这个框架,需加入这两个包,用起来感觉还不错。
下面介绍一下。
Validator采用基于两个xml文件的方式来配置验证规则,分别为validation.xml,validator-rules.xml。在struts应用中,需放到web-inf目录下。
1.validator-rules.xml
这个文件包含了一组验证规则,对所有struts应用都适用。一般情况不用修改这个文件,除非要修改或扩展默认规则。如果要给应放到另一个xml 文件中,而不是直接添加到validator-rules.xml文件中,这样当Validator升级时,不用修改validator- rules.xml文件。
2.validator.xml文件
这个文件是针对于具体struts应用的,他可以为应用中的ActionForm配置验证规则。
而不用编码实现验证。
例如一个验证登陆form的例子,要求用户名必须填写,秘密要求必填、最大、最小长度
及其内容的要求。

 1<form-validation>
 2    <global>
 3        <!-- 密码由数字、26个英文字母或者下划线组成的字符串  -->
 4        <constant>
 5            <constant-name>pwd</constant-name>
 6            <onstant-value>^\w+$</onstant-value>
 7        </constant>
 8    </global>
 9    <formset>
10        <form name="loginForm">
11            <!-- 这里的用户名使用邮箱,验证时使用正则表达式进行验证 -->
12            <field property="user.userId" depends="required">
13                <arg0 key="user.userId" />
14            </field>
15            <field property="user.userPwd" depends="required,minlength,maxlength,mask">
16                <!-- msg name="mask" key="errors.invalid" /-->
17                <arg0 key="user.userPwd" />
18                <arg1 name="minlength" key="${var:minlength}" resource="false" />
19                <arg2 name="maxlength" key="${var:maxlength}" resource="false" />
20                <var>
21                    <var-name>mask</var-name>
22                    <var-value>^\w+$</var-value>
23                </var>
24                <var>
25                    <var-name>minlength</var-name>
26                    <var-value>6</var-value>
27                </var>
28                <var>
29                    <var-name>maxlength</var-name>
30                    <var-value>20</var-value>
31                </var>
32            </field>
33        </form>
34    </formset>
35</form-validation>

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

3.Validator插件
为了在struts中用validator,可以用插件方式加载Validator框架,
需在struts配置文件中配置ValidatorPlugIn插件,同时写明两个xml文件的路径。
应用启动时,Strust会加载这个插件,并调用他的init()方法,init()方法根据pathnames加载相应的validator-xml,validator.xml文件,把验证信息读入到内存中。

1<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
2        <set-property    value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"
3            property="pathnames" />
4    </plug-in>
4.Validator和ActionForm
Validator框架不能直接org.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配置文件的<action>元素的name属------>validator.xml文件<form>元素的name属性
ValidatorActionForm
Strust配置文件的<action>元素的path属------>validator.xml文件<form>元素的name属性
Validator框架提供这两个类目的在于可以更加精确的控制执行验证的条件。
例如
loginForm表单对应两个验证规则A、B。对应login、cancel两个动作。
如果对于这两个动作都要执行规则A、B。则可以扩展一个ValidatorFom类loginForm
然后配置
1<formset>
2<form name=”loginForm”>
3    验证规则A
4    验证规则B
5.</form>
6….
7</formset>

如果对于用户的login动作,执行规则A。对于cancel动作执行B规则。则可以扩展一个ValidatorActionFom类loginForm
然后配置
1<formset>
2<form name=”login”>
3    验证规则A
4.</form>
5<form name=”cancel”>
6    验证规则B
7.</form> 
8</formset>

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

5.在validator框架中使用JavaScript
默认情况下,validator框架在服务器端执行表单验证。也可以在客户端验证。
如果在客户端验证,需要使用struts的<html:javascript>标签,他能在jsp页面中生成用于客户端验证的JavaScript的脚本。
1) 在validator-rules.xml文件的<validator>元素中配置<javascript>元素
默认struts框架的validator-rules.xml文件已经包含了javascript子元素。
也可以将这些javascript集中放到一个validator.js的文件中,也页面中引入
1<script language="Javascript1.1" src="js/validator.js"></script>

2) 在Jsp页面中包含<html:javascript>
<html:javascript formName=”loginForm”> 这个标签的form的name属性制定需要验证的表单名字,他能够访问为表单配置的验证规则的javascript元素,把包含的脚本写到jsp页面中
,生成validateLoginForm的函数,负责执行验证逻辑
3) 对需要验证的表单定义onsubmit事件
4)
1<html:form action="manageContract.do" onsubmit="return validateContractForm(this);">

5) 用户在表单上提交后,就会调用<html:javascript>
标签生成的js脚本validateLoginForm函数,执行验证。如果验证失败,就会弹出对话框提示,不会提交的服务器端。

小结
使用步骤
1)创建扩展ValidatorForm或ValidatorActionForm类的ActionForm,如果使用动态ActionForm,则不用扩展 DynaValidatorForm或DynaValidatorActionForm类的子类,可以直接进行第二步
2) 在struts文件中配置form和action元素
3) 把validator框架使用的文本信息添加到应用的Resource Bundle中
4)
1<message-resources parameter="com.web.ApplicationResources" />

5) 在validatorxml文件中为表单配置验证规则
6) 在struts配置文件中配置validatorPlugIn插件
1    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
2        <set-property value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" property="pathnames" />    </plug-in>

posted @ 2008-04-03 10:55 Mr.Qiu 阅读(289) | 评论 (0)编辑 收藏