struts验证框架开发详解

jquery验证插件Validator 立即下载

一、启用Validator插件

        虽然Validator框架是与Struts封装在一起提供的,但在默认状况下Validator并不被启用。为了启用Validator,要向你的应用程序的struts-config.xml文件中添加下面的插件定义。

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

二、配置validator-rules.xml
        Struts示例应用程序带有这个文件的预配置拷贝。在大多数情况下,你不必修改这个预配置拷贝,除非你要向该框架中添加自己定制的验证。默认情况下,Validator中包括几个基本验证例行程序,你可以用它们来处理大多数验证问题。这些例行程序具有逻辑名称,如required(用于输入要求的值)、CreditCard(用于输入信用卡号码值)、email(用于输入电子邮件地址值),等等。

三、配置ApplicationResource.properties
        ApplicationResource.properties属性文件中这时应该追加用于验证错误的消息,validator-rules.xml的标准验证逻辑中包括了错误信息的名称,譬如required验证会在“msg”属性中包括errors.required消息,这时你就需要在ApplicationResource.properties中定义该消息,必须要和validator-rules.xml中的msg申明的消息名称一致。例如: 

  errors.required={0} is required.
   errors.minlength={0} can not be less than {1} characters.
   errors.maxlength={0} can not be greater than {1} characters.
   errors.invalid={0} is invalid.

   errors.byte={0} must be a byte.
   errors.short={0} must be a short.
   errors.integer={0} must be an integer.
   errors.long={0} must be a long.
   errors.float={0} must be a float.
   errors.double={0} must be a double.

   errors.date={0} is not a date.
   errors.range={0} is not in the range {1} through {2}.
   errors.creditcard={0} is an invalid credit card number.
   errors.email={0} is an invalid e-mail address.

 

将这些信息直接拷贝到ApplicationResource.properties中即可。

四、创建Form
   根据不同情况分别可以创建三种类型的form:
   1、ValidatorForm
   2、DynaValidatorForm
   3、ValidatorActionForm和DynaValidatorActionForm
   注意:对于由myeclipse生成的静态form,如果在form中包括validate()方法,要将其去掉,否则,验证就会被这个空的validate()方法覆盖而没有发挥作用

        创建步骤类似,ValidatorForm需要具体的form,该form继承自ValidatorForm,并且不包含reset()和validate()方法,而DynaValidatorForm不需要具体的form,这两种form的实现方法基本相同,

对ValidatorActionForm和DynaValidatorActionForm的解释:

对于1、2两种验证有一点不足,就是在validation.xml文件中将表单属性的验证捆绑到具体的form上了,譬如:

 

 <form name="registerForm">
            <field
                property="userName"
                depends="required">
                    <arg key="label.username"/>
            </field>
            <field
                property="passWord"
                depends="required,maxlength">
                    <arg0 key="label.password"/>
                    <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
                    <var>
                      <var-name>maxlength</var-name>
                      <var-value>8</var-value>
                    </var>
            </field>           
            <field
                property="phone"
                depends="required,mask">
                    <arg key="label.phone"/>
<var>
                        <var-name>mask</var-name>
                        <var-value>^[0-9]*$</var-value>
                    </var>
            </field>
        </form>

        可以看到,form的name属性指定了具体的form即registerForm,下面对三个属性的验证规则只能用在registerForm上,如果这三个验证规则是通用的就好了,也就是说如果存在注册表单和修改表单的操作都能够使用这三个规则就好了,这时就要引入一个概念就是验证跟随操作,而不是绑定到具体的form上。例如注册表单和修改表单由于验证规则相同,则将三个验证规则放到具体的action上就行了,验证规则可以如下定义:

 <form name="/register">
            <field
                property="userName"
                depends="required">
                    <arg key="label.username"/>
            </field>
            <field
                property="passWord"
                depends="required,maxlength">
                    <arg0 key="label.password"/>
                    <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
                    <var>
  <var-name>maxlength</var-name>
                      <var-value>8</var-value>
                    </var>
            </field>           
            <field
                property="phone"
                depends="required,mask">
                    <arg key="label.phone"/>
                    <var>
                        <var-name>mask</var-name>
                        <var-value>^[0-9]*$</var-value>
                    </var>
            </field>
        </form>
           <form name="/editregister">
            <field
                property="userName"
                depends="required">
                    <arg key="label.username"/>
            </field>
            <field
                property="passWord"
 depends="required,maxlength">
                    <arg0 key="label.password"/>
                    <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
                    <var>
                      <var-name>maxlength</var-name>
                      <var-value>8</var-value>
                    </var>
            </field>           
            <field
                property="phone"
                depends="required,mask">
                    <arg key="label.phone"/>
                    <var>
                        <var-name>mask</var-name>
                        <var-value>^[0-9]*$</var-value>
                    </var>
            </field>
        </form>

[NextPage]

        上面form的name属性已不再是struts-config.xml中定义的form的name,而是其中定义的action的path属性值。

        为了解决这个问题,Validator提供了两个附加的ActionForm子类,它使你能够将验证与操作相关联,而不是与Form Bean相关联。这样你就可以根据哪个操作正在使用Form Bean来指定把哪些验证用于该Form Bean了。

五、创建Validation.xml
 下面介绍一下validation.xml配置文件的标签:
<form-validation></form-validation>是总框架
<formset></formset>是对Form里的数据进行配置
<form name="ActionForm对应的名称"></form>对一个ActionForm里的数据进行验证配置
<field property="ActionForm里的属性名" depends="验证规则,可以是Validation-rules里定义好的也可以是自定义的验证规则">这里配置一个属性的验证内容
<arg0 name="对应的验证规则名称" key="可以直接填入数值,也可填入变量表达式:${var:变量名}" resource="true/false"(代表是否从资源文件中读取信息,否则Key的值以参数的形式返回)>
<var></var>定义一个变量的标签体,可以在里面具体设置变量的名称以及数值
<var-name>对应Key里定义的变量名称</var-name>
<var-value>值</var-value>
<msg name="对应的验证规则名称" key="资源文件中定义的变量名称">这里定义了信息变量后,会默认定义的信息变量。
在验证规则中大部分可以使用已经预定义好的规则,它们在validator-rules.xml里,当然我们自己也可以定义规则。

其实,这个文件名可以是任意的,可以起成别的名字,比如:validators.xml,不过,也要相应修改struts-config.xml文件中的加入validator框架PlugIn中的value属性。这个value属性用来指定validator-rules文件和具体的验证文件。

1)根元素:
validators.xml文件的“根元素(Root)”是form-validation,
意味着整个文件的内容包含在“<form-validation>”和“</form-validation>”之间,

2)元素global:
这个东西包含constant子元素,用来定义一个全局的“验证限制”,
以便在这个文件的其他地方使用这些验证规则。
例如:

 <global>
        <constant>
            <constant-name>userName</constant-name>
            <constant-value>^/s*[/w-]{0,30}$</constant-value>
        </constant>
        <constant>           
            <constant-name>password</constant-name>
            <constant-value>^/s*[./w@#!$%^*()-]{6,20}/s*$</constant-value>
        </constant>
        <constant>       
            <constant-name>email</constant-name>
 <constant-value>^/s*([A-Za-z0-9]+(/./w+)*@([/w-]+/.)+/w{2,3})/s*$</constant-value>
        </constant>
    </global>

 


完整实例如下:
<form-validation>
    <global>
        <constant>
            <constant-name>userName</constant-name>
            <constant-value>^/s*[/w-]{0,30}$</constant-value>
        </constant>
        <constant>           
            <constant-name>password</constant-name>
            <constant-value>^/s*[./w@#!$%^*()-]{6,20}/s*$</constant-value>
        </constant>
        <constant>       
            <constant-name>email</constant-name>
            <constant-value>^/s*([A-Za-z0-9]+(/./w+)*@([/w-]+/.)+/w{2,3})/s*$</constant-value>
        </constant>
    </global>
  <formset>
    <form name="employeeActionForm">
    <field property="vname" depends="required,maxlength">
      <arg0 key="employee.name"/>
      <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
      <var>
        <var-name>maxlength</var-name>
        <var-value>10</var-value>
      </var>
    </field>
    <field property="vsex" depends="required,maxlength">
      <arg0 key="employee.sex"/>
      <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
      <var>
        <var-name>maxlength</var-name>
 <var-value>5</var-value>
      </var>
    </field>
    <field property="vage" depends="required,integer,intRange">
      <arg0 key="employee.age"/>
      <arg1 name="intRange" key="${var:min}" resource="false"/>
      <arg2 name="intRange" key="${var:max}" resource="false"/>
      <var>
        <var-name>min</var-name>
        <var-value>1</var-value>
      </var>
      <var>
        <var-name>max</var-name>
        <var-value>100</var-value>
      </var>
    </field>
    <field property="vmoney" depends="integer">
      <arg0 key="employee.money"/>
    </field>
    </form>
  </formset>
</form-validation>

对部分元素的解释:
field元素定义了对特定属性的验证。

有时mask和email无法使用时,加入jakarta-oro-2.0.8.jar的包

如何使用CDlinux minidwep破解无线网络密码 软件下载:http://blog.xjxhd.cn/article/system/cdlinux.htm 集成所有软件包; 包含aircrack-ng-1.0-rc2,minidwep,spoonwep2,spoonwpa,feedingbootle奶瓶等等 作者:古月 日期:2010-07-17 启用VMware Workstation 虚拟软件 下面是启动软件界面 立即下载

相关推荐

validator页面验证插件

用在页面提交内容输入验证

Validation-xml配置解析

在validation.xml中进行相关的验证配置 .在validation.xml中进行相关的验证配置如: //struts-config.xml中formBean的名字 //property相关验证字段的名称,depends所对应的验证器 //当resource为TRUE时,表示使用来自resource Bundle中的消息,反之指定key中消息 m...

king 471

validator jQuery表单验证插件

插件描述:Validator是一个jQuery验证插件,可以验证文本,文本区,密码复选框并选择元素。验证器支持:需要依赖复选框,最小/最大长度、电子邮件、数量、数字和一些定位的错误消息

jQuery插件【validate】国际化校验插件

validate插件是一款功能强大的jQuery插件,它不仅支持多种的规则校验,如:数字,必输,邮箱。还支持自定义规则和提示信息。刚才说过,jQuery的插件大多数是以json字串的方式编写参数和值的。那么validate也不例外。

mmklo的博客 1584

bert-ini:一种基于bert的实体对齐交互模型

本次分享一项来自IJCAI-20的实体对齐工作,该工作提出了一种不同于以往的采用图结构信息进行实体对齐的技术方案,该方案取得了当时的最好效果;不仅如此,模型本身的对齐效率在该项工作中也被考虑,实际工作中非常具备借鉴意义。

qq_33331424的博客 3154

利用ArcGIS的模型构建器实现批量投影栅格和批量克里金插值

博主要批量投影几百个栅格,但是ArcGIS中的投影栅格的批处理工具需要手动一条条设置参数,还是麻烦,因此学习了使用模型构建器(ModelBuilder)来批量投影栅格,可以导入需投影栅格的文件夹,然后迭代投影,并按栅格原名逐个输出到指定目录。 1.在工具箱里构建模型 在arctool box里右键点击空白处,选择【添加工具箱】,点击ArcGIS默认工作目录的工具箱进行添加,然后Toolbox就会被添加到ArcToolbox页面,右键点击Toolbox,选择“新建”-“模型” 2.编写模型 (1).

qq_36958801的博客 1万+

validate数据校验插件的使用

validate数据校验插件的使用

weixin_68658847的博客 566

FFmpeg + OBS 低延迟直播串流实战:从H264裸流到RTP组播的完整配置

本文详细介绍了如何利用FFmpeg将H264裸流转码为RTP协议,并通过组播技术实现与OBS客户端的超低延迟直播串流。文章深入剖析了FFmpeg关键参数调优、SDP文件生成与配置,以及OBS客户端的无缝拉流方法,为需要毫秒级实时交互的场景提供了一套去中心化、高效稳定的完整解决方案。

fanta的博客 830

jQuery表单校验——插件validator使用方法详解

validator插件:将jquery实现的常用操作进行封装,我们只需要学会插件的使用语法,就可以使用简单的代码实现较为复杂的功能。validator的基本使用1. 需要引入的文件① jQuery类库② 插件的js文件 官网2.表单校验插件validator的基本语法在rules中通过校验规则名称使用校验规则 ,在messages中定义该规则对应的错误提示信息。 常用的校验规则名称,规则值及使用范围:注:$(“form表单的选择器”)即表单jQuery对象。扩展:当错误提示信息不按照我们预想的位置显示时

Gorden的博客 4055

Python中的串口通信库pyserial(基础)

pyserial是一个跨平台的库,可以在多个操作系统上使用,包括Windows、Linux和MacOS。:flushInput方法用于清除输入缓冲区中的所有数据,flushOutput方法用于清除输出缓冲区中的所有待发送数据。:PySerial允许在创建Serial对象后,通过修改对象的属性来设置串口参数,如波特率、数据位、校验位和停止位。同时,也提供了方法或属性来检查串口的状态,如是否已打开。:sendBreak方法用于向串口发送一个BREAK信号,这可以用于向连接的设备发送一个中断或重置信号。

weixin_44217158的博客 1万+

5分钟搞定!用Coze+剪映小助手批量生成萌宠视频(附完整工作流配置)

本文详细介绍了如何利用Coze工作流与剪映小助手快速批量生成萌宠视频的完整方案。通过智能内容生成、素材处理、剪辑组装和输出适配四大模块的协同,实现5分钟内完成高质量视频制作。特别适合多宠物账号运营者,工作流支持模板切换和参数修改,大幅提升内容生产效率。

weixin_28678151的博客 392

Struts_validator验证框架开发详解

<br />validator验证框架开发步骤如下:<br />1.启用Validator插件<br />   虽然Validator框架是与Struts封装在一起提供的,但在默认状况下Validator并不被启用。<br />为了启用Validator,要向你的应用程序的struts-config.xml文件中添加下面的插件定义。<br /><plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-propert

HelloWorld 521

下载猫 —— 会员体系安全分析与加固方案

下载猫的会员验证体系完全失效,破解不需要任何工具链、不需要写代码、不需要改文件。已验证的成功攻击路径:攻击者启动软件时加一个参数,然后用 3 行 JavaScript 即可将会员状态改为"有效期至 2099 年",全部功能闸门放行。等价于普通用户按F12打开控制台输入 3 行代码,全程不到 10 秒。项目结论破解难度⭐ 极低(会按 F12 即可,无需任何破解工具)是否修改文件否(重启软件自动恢复)是否需要服务器否是否影响其他用户单人即可完成,可复制分发修复所需工作量。

猫敷雪 57

Struts2

Struts 2是在WebWork2基础发展而来的。 注意:struts 2和struts 1在代码风格上几乎不一样。 Struts 2 相比Struts 1的优点: 1、在软件设计上Struts 2 没有像Struts 1那样跟Servlet API 和 struts API 有着紧密的耦合。 Struts 2的应用可以不依赖于Servlet API和Struts A...

diaolianxian9049的博客 109

Qemu开发ARM篇-5、buildroot制作根文件系统并挂载启动

在上一篇中,我们编译了kernel,并在qemu上进行了运行,但到最后,在挂载根文件系统时候,挂载失败,这是因为我们还没有根文件系统,在本章中,我们将制作根文件系统。rootfs制作方式有很多方式,如busyBoxbuildrootYocto等,在该篇章中,我们使用buildroot来制作根文件系统,主要考虑到busyBox制作完还需要手动首改一些启动配置比较繁琐,而Yocto如果电脑配置不是很好,编译时间过长,比较麻烦。

sinat_33909696的博客 2465

从苏宁电器到卡巴斯基第02篇:我的本科时光(中)

怎么还分班了呢? 大概是在大二第二学期的时候吧,学院突然通知我们要分班。因为我们目前所有学生都是属于工商管理专业的,而从下个学期开始,就要分为会计、市场营销以及工商管理这三个方向。这还真是打了我一个措手不及,我都不知道还有分班这一回事。不过也没关系,我继续选择我的工商管理就好了。不过,在实际的选择结果上,像会计和工商管理这种学科,选的人自然是占了绝大多数,而选择市场营销的,大概也就是十

Gleam的专栏 9607

java框架复习——struts2

攒珠子

ww0peo的博客 504

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Struts2基础学习总结

Struts 2是在WebWork2基础发展而来的。 注意:struts 2和struts 1在代码风格上几乎不一样。 Struts 2 相比Struts 1的优点: 1、在软件设计上Struts 2 没有像Struts 1那样跟Servlet API 和 struts API 有着紧密的耦合。 Struts 2的应用可以不依赖于Servlet API和Struts API 。 ...

weixin_30764771的博客 92

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Validator验证框架

Validator验证框架使用教程 发表于:2007年7月10日 1时0分29秒来源:权限: 公开阅读(183)评论(0) 举报本文链接:http://user.qzone.qq.com/119887/blog/8 Validator验证框架使用教程 Validator验证框架使用教程 2006年10月17日 星期二 10:09 Terry原创,转载请说明作者及出处。 ...

fengxiushuying的专栏 207

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Struts2学习总结

Struts2基础学习总结 Struts 2是在WebWork2基础发展而来的。 注意:struts 2和struts 1在代码风格上几乎不一样。 Struts 2 相比Struts 1的优点: 1、在软件设计上Struts 2 没有像Struts 1那样跟Servlet API 和 struts API 有着紧密的耦合。      Struts 2的应用可以不依赖于Servlet AP

ResignJUN的博客 379

Struts2基础学习总结(转)

流程图    Struts 2是在WebWork2基础发展而来的。 注意:struts 2和struts 1在代码风格上几乎不一样。 Struts 2 相比Struts 1的优点: 1、在软件设计上Struts 2 没有像Struts 1那样跟Servlet API 和 struts API 有着紧密的耦合。      Struts 2的应用可以不依赖于Servlet API和...

ldaolong的专栏 139

struts2 基础学习

开发十年,就只剩下这套架构体系了! >>> ...

乐在克里特的博客 180
上一篇: select中取得action返回的直接
下一篇: file中限定文件类型
AngleKill
博客等级 码龄18年 20粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值