`

Struts 结合 Validate框架验证详解

阅读更多
转自:http://student.csdn.net/space.php?uid=126037&do=blog&id=28776
我们按照开发步骤讲解:

1.       首先我们新建一个项目,导入Struts框架;

2.       导入Struts框架之后我们可以看到,在WEB-INF目录下有一个validator-rules.xml,这说明在导入Struts的时候validate框架也被导入进来了。validator-rules.xml  验证模板,里面定义了各种常见的验证规则,我们不需要对这个文件进行编辑,我们只需要使用模板里面定义的验证规则即可.当然我们也可以自己手写一个validator-rules.xml文件,但是必须以http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd约束它。

3.       在此基础上我们还必须自己定义一个xml文件。文件名可以任意命名,例如:validator.xm(同样他必须导入相应版本的dtd文件约束它),但是,文件必须创建在类加载器能够加载到得目录下,一般我们放在WEB-INF目录下; 这个配置文件由我们自己编辑,描述使用哪种类型的验证模板来进行验证.

4.  由于Validate框架是Struts之外的框架部分,所以我们必须在Struts中导入验证框架的插件(org.apache.struts.validator.ValidatorPlugIn);在基于以上的步骤之后,我们必须配置Struts-config.xml,加载插件和插件所学要的文件了,如下:  <plug-in className="org.apache.struts.validator.ValidatorPlugIn">

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

    <!-- set-property property="stopOnFirstError" value="true"/> -->

  </plug-in>

5.       接下来我们就开始做具体的验证了,我们看如下代码:

<form-validation>

<global></global>

    <formset>

<constant>

       <constant-name></constant-name>

    <constant-value></constant-value>

</constant>

    <form name="regForm">

    <!-- Validate name -->

           <field property="name" depends="required,maxlength">

              <arg0 key="name"/>

           <arg1 key="${var:maxlength}" resource="false"/>

           

           <var>

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

                  <var-value>20</var-value>

           </var>

           </field>

       </formset>

</form-validation>

这是我们在/WEB-INF/validator.xml中配置的一段验证用户名的简单配置信息,接下来我们看看相应的dtd文件的定义:

<!ELEMENT form-validation (global*, formset*)>     --根元素(必须有1-n个global,formset)

 

<!ELEMENT formset (constant*, form+)>     --form是必须有一个的,constant可选的

<!ATTLIST formset language CDATA #IMPLIED>  

<!ATTLIST formset country CDATA #IMPLIED>

<!ATTLIST formset variant CDATA #IMPLIED>

 

<!ELEMENT form (field+)>         --field也是至少有一个

<!ATTLIST form name CDATA #REQUIRED>

 

<!ELEMENT field (msg|arg|arg0|arg1|arg2|arg3|var)*>  --在field中可以有o-n个msg|arg| var

<!ATTLIST field property CDATA #REQUIRED>

<!ATTLIST field depends CDATA #IMPLIED>

<!ATTLIST field page CDATA #IMPLIED>

<!ATTLIST field indexedListProperty CDATA #IMPLIED>

 

<!ELEMENT msg EMPTY>

<!ATTLIST msg key CDATA #REQUIRED>

<!ATTLIST msg name CDATA #REQUIRED>

<!ATTLIST msg bundle CDATA #IMPLIED>

<!ATTLIST msg resource CDATA #IMPLIED>

 

<!ELEMENT arg EMPTY>

<!ATTLIST arg key CDATA #REQUIRED>

<!ATTLIST arg bundle CDATA #IMPLIED>

<!ATTLIST arg name CDATA #IMPLIED>

<!ATTLIST arg resource CDATA #IMPLIED>

<!ATTLIST arg position CDATA #IMPLIED>

…………

……

<!ELEMENT var (var-name, var-value, var-jstype?)>

<!ELEMENT var-name  (#PCDATA)>

<!ELEMENT var-value (#PCDATA)>

<!ELEMENT var-jstype (#PCDATA)>

 

这里我们就不一一讲解dtd文件了,这不是今天的重点,结合dtd和以上的xml文件可以一目了然的了解验证的结构,这里我们简单的讲述下一些元素和属性的作用:、

Global: 着这里我们可以定义formset一些公用的属性或者对象;

Formset:要验证表单的集合;

Constant:着这里我们可以定义form一些公用的属性或者对象;

Form: 相当于就是一个表单元素,他有一个name属性,如:name="regForm";

我们说这里的name的值可以不与struts-config.xml中From的一样,有些时候我们可以填写一个Action的路径;

Field:  表单字段

|-property="name"  该属性表示了字段的名字,和AcitionForm中的必须一致;

|-depends="required,maxlength";该属性用于指定验证的规则;

Arg:用于填充验证结果的参数;

    |-key="" ;该属性用于指向参数的值;

|-resource="" ;该属性用于控制程序是否读取配置文件;

|-name=””;该属性用于指定验证规则的名字;

Msg:用于覆盖验证规则文件中的消息信息,(自定义信息);

 

6.  既然我们是要验证表单,当然我们在struts-config.xml中的Action配置validate=”true” input=”…”是必须的。

7.  这个时候我们就需要在资源文件中配置好验证要用到的信息了;建议大家从validator-rules.xml 直接拷贝即可;

8.  我们以前在一个最普通的ActionFrom中做验证是实现它的Validate(……)方法,手工写验证步骤,在我们用了validate框架之后呢? 我的From就不直接继承ActionFrom了,我们改变继承ValidatorForm,这个类里面已经为我们写好了一个验证的方法,所以我们如果在自己的Form中还保留这个方法的话就会覆盖父类中的验证方法,这对于我们来说是毫无意义的,所以我们必须在自己的Form中注释或者删除验证方法。这里需要我们注意的是:当使用的是动态From时候,我们继承是ValidatorActionForm

9.  到这里我们已经是万事俱备,只欠显示了,最后我们在页面上打入struts标签库,<bean:message ……/>可以完成我们的验证了。

10.我上述讲解的是后台验证,在struts中结合validate框架可以轻松的实现前台的JavaScript验证,从而减轻服务器的负担,因为它会自动生成JavaScript脚本,下面我们来看看前台验证的步骤:

1).前提是后台已经实现了一套validate验证;

2).在jsp页面上的JavaScript区域(head之间)加上如下代码:

       <html:javascriptform Name="regForm" method="validateRegForm"/>

Name属性是Form的名称;method:生成JavaScript验证方法的名称,默认为validate+From名称;

3).在表单上添加 onSubmit 方法即可,如:onsubmit=”return validateRegForm(this)”,这里必须传入一个参数,这个参数真是我们当前的from对象。

 

--值得我们注意的是:上面只是简单的讲述validate框架在struts使用步骤,我们知道验证框架是一个非常强大的独立的验证体系,他可以应用于我们很多的应用程序,它不依赖于struts,如果想更深入如的了解这个框架,必须去看他的api和源码,在validate框架中为我们提供的验证规则也就是基本的验证,不能满足我在开发中的需求,但是框架我们提供了自定义的验证方法,只需要按照他的规则定义并且配置validator-rules.xml的相关信息即可,这里只提供思路:

一、 首先我们自定一个验证的类:CheckIdCard.java

public class CheckIdCard implements Serializable {   

public static boolean validateIdCard(Object bean,

ValidatorAction va,

                              Field field, 

ActionMessages errors, 

Validator validator,

                              HttpServletRequest request) {

              //此处写我们验证的逻辑。

           。。。。。。。。。。。。。。



    }

类里面定义的都是静态的方法哦。

二、配置validator-rules.xml的相关信息

    <validator name="idCard"

            classname="org.rao.struts.util.CheckIdCard "

               method=" validateIdCard "

         methodParams="java.lang.Object,

                       org.apache.commons.validator.ValidatorAction,

                       org.apache.commons.validator.Field,

                       org.apache.struts.action.ActionMessages,

                       org.apache.commons.validator.Validator,

                       javax.servlet.http.HttpServletRequest"

              depends=""

                  msg="errors.idCard"

           jsFunction="******* "/>

这就相当我们已经注册好了一个验证规则了,jsFunction="******* ":这里我们没有实现它的JavaScript验证,大家有兴趣可以自己研究。

 

 

 

 关于struts validate框架基于不同actionForm,配置文件中validate属性的默认值区别
 Form Bean中:
 1、<form-bean name="loginForm" type="com.lwf.action.LoginForm"/> ,LoginForm继承自ActionForm; 那么<action 中默认validate属性值为true,会执行验证,但是客户点击验证提示后会自动提交到action处理,所以验证相当于无效的。即使设置了validate="true"属性,验证后也会提交到action处理,验证无效。
 2、<form-bean name="loginForm" type="com.lwf.action.LoginForm"/>,LoginForm继承自ValidatorForm;那么<action 中默认validate属性值为true,会执行验证,客户点击验证提示后不会自动提交到action处理,所以验证有效。
 3、<form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm"> 那么<action 中默认validate属性值为true,会执行验证,客户点击验证提示后不会自动提交到action处理,所以验证有效。
 4、<form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm">那么<action 中默认validate属性值为true,会执行验证,但是客户点击验证提示后会自动提交到action处理,所以验证相当于无效的。即使设置了validate="true"属性,验证后也会提交到action处理,验证无效。

 

 

 

 

 附件为与validate相关的文档

分享到:
评论

相关推荐

    [AB PLC例程源码][MMS_044666]Translation N-A.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    kolesar_3cd_01_0716.pdf

    kolesar_3cd_01_0716

    latchman_01_0108.pdf

    latchman_01_0108

    matlab程序代码项目案例:matlab程序代码项目案例MPC在美国高速公路场景中移动的车辆上的实现.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    pimpinella_3cd_01_0716.pdf

    pimpinella_3cd_01_0716

    petrilla_01_0308.pdf

    petrilla_01_0308

    [AB PLC例程源码][MMS_041452]Speed Controls in Plastic Extrusion.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    强化学习驱动下DeepSeek技术创新及其对AI发展的影响

    内容概要:本文档由张卓老师讲解,重点探讨DeepSeek的技术革新及强化学习对未来AI发展的重要性。文章回顾了AI的历史与发展阶段,详细解析Transformer架构在AI上半场所起到的作用,深入介绍了MoE混合专家以及MLA低秩注意机制等技术特点如何帮助DeepSeek在AI中场建立优势,并探讨了当前强化学习的挑战和边界。文档不仅提及AlphaGo和小游戏等成功案例来说明强化学习的强大力量,还提出了关于未来人工通用智能(AGI)的展望,特别是如何利用强化学习提升现有LLMs的能力和性能。 适用人群:本资料适宜对深度学习感兴趣的研究人员、开发者以及想要深入了解人工智能最新进展的专业人士。 使用场景及目标:通过了解最新的AI技术和前沿概念,在实际工作中能够运用更先进的工具和技术解决问题。同时为那些寻求职业转型或者学术深造的人提供了宝贵的参考。 其他说明:文中提到了许多具体的例子和技术细节,如DeepSeek的技术特色、RL的理论背景等等,有助于加深读者对于现代AI系统的理解和认识。

    有师傅小程序开源版v2.4.14+前端.zip

    有师傅小程序开源版v2.4.14 新增报价短信奉告 优化部分细节

    [AB PLC例程源码][MMS_047333]Motor Sequence Starter with timers to start.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    商城二级三级分销系统(小程序+后台含源码).zip

    商城二级三级分销系统(小程序+后台含源码).zip

    li_3ck_01b_0918.pdf

    li_3ck_01b_0918

    nicholl_3cd_01_0516.pdf

    nicholl_3cd_01_0516

    1995-2022年 网络媒体关注度、报刊媒体关注度与媒体监督相关数据.zip

    媒体关注度是一个衡量公众对某个事件、话题或个体关注程度的重要指标。它主要反映了新闻媒体、社交媒体、博客等对于某一事件、话题或个体的报道和讨论程度。 媒体监督的J-F系数(Janis-Fadner系数)是一种用于测量媒体关注度的指标,特别是用于评估媒体对企业、事件或话题的监督力度。J-F系数基于媒体报道的正面和负面内容来计算,从而为公众、研究者或企业提供一个量化工具,以了解媒体对其关注的方向和强度。 本数据含原始数据、参考文献、代码do文件、最终结果。参考文献中JF系数计算公式。 指标 代码、年份、标题出现该公司的新闻总数、内容出现该公司的新闻总数、正面新闻数全部、中性新闻数全部、负面新闻数全部、正面新闻数原创、中性新闻数原创、负面新闻数原创,媒体监督JF系数。

    [AB PLC例程源码][MMS_040315]Double INC and Double DEC of INT datatype.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_047773]Convert Feet to Millimeters.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    [AB PLC例程源码][MMS_042349]How to read-write data to-from a PLC using OPC in Visual Basic 6.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    matlab程序代码项目案例:matlab程序代码项目案例论文代码 多篇RMPC 鲁棒模型预测控制Paper-code-implementation.zip

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    lusted_3cd_02_0716.pdf

    lusted_3cd_02_0716

    pepeljugoski_01_0107.pdf

    pepeljugoski_01_0107

Global site tag (gtag.js) - Google Analytics