Validator验证框架
Struts框架能够在ActionForm Bean 的validate()方法中对用户输入的表单数据进行验证。这种验证方法有两种局限性:
必须通过程序代码来实现验证逻辑,如果验证逻辑发生变化,必须重新编写和编译程序代码。
当系统中有多个ActionForm Bean,并且它们包含一些相同的验证逻辑时,开发人员必须对每个ActionForm Bean进行重复编程,完成相同的验证逻辑,这会降低代码的可重用性。
Validator框架主要依赖于两个JAR文件:
Jakarta-oro.jar,提供了一组处理文本的类,具有文本替换、过滤和分割等功能。
Commons-validator.jar;提供了一个简单、可扩展的验证框架,包含了通用的验证方法和验证规则。
Validator框架采用两个基于XML的配置文件来配置验证规则。这两个文件为validator-rules.xml和validation.xml。在struts应用中,它们均放在WEB-INF目录下。
validator-rules.xml文件:
validator-rules.xml文件包含了一组通用的验证规则,对所有的Struts应用都适用。
Validation.xml文件
Validation.xml文件是针对于某个具体Struts应用的,需要开发人员来创建,它可以为应用中的ActionForm配置所需要的验证规则。
下面显示了一个简单的validation.xml文件样例。
<form-validation>
<golobal>
<constant>
<constant-name>phone</ constant-name>
<constant-value>^\d{8}*$</constant-value>
</constant>
</golobal>
<formset>
<form name=”checkoutForm”>
<field
property=”phone”
depends=”required,mask,minlength”>
<arg0 key=”label.phone”/>
<arg1 name=”minilength” key=”${var:minlength}” resource=”false”/>
<var>
<var-name>mask</ var-name >
<var-value>${phone} </var-value>
</var>
<var>
<var-name>minlength</ var-name >
<var-value>7 </var-value>
</var>
</field>
</form>
</formset>
</form-validation>
1.<form-validation>元素
validation_1_1.dtd描述了validation.xml文件的语法。validation.xml文件的根元素为<form-validation>元素,它包含两个子元素:<global>和<formset>。<global>元素可以出现零次或多次,而<formset>元素可以出现一次或多次。它们的DTD定义如下:
<!element form-validation(global*,formset+)>
2.<global>元素
在<global>元素中可以定义<constant>子元素,它用来定义常量表达式,在文件的其余地方可以引用这些常量表达式。以下代码配置了两个<constant>元素:
<golbal>
<constant>
<constant-name>phone</constant-name>
<constant-value>^\d{8}\d*$</constant- value >
</constant>
<constant>
<constant-name>zip</constant-name>
<constant-value>^\d{6}\d*$</constant- value >
</constant>
</golbal>
以上代码定义了两个常量phone和zip,在<formset>元素中可以通过${constant-name}的形式来引用它们,例如访问phone常量的形式为${phone}.
3.<formset>元素
<formset>元素包含两个子元素:<constant>和<form>。<constant>可以出现零次或多次,<form>元素可以出现一次或多次。
提示 在<global>中定义的<conatant>元素代表全局常量,而在<formset>元素中定义的<conatant>元素代表局部常量,后者只能在当前<formset>元素中使用
<formset>元素有两个属性:language和country。Language和country属性用于支持I18N。本章的10.7节将对此做介绍。
4.<form>元素
<formset>元素的<form>子元素用于为表单配置验证规则,它的name属性指定了表单的名字。<form>元素可以包含一个或多个<field>子元素.
5.<field>
<form>元素的<field>子元素用于配置表单中字段的验证规则。例如对checkoutForm表中的 phone字段配置了验证规则/
对<field>元素的属性做了描述。
<field>元素的属性
Property 指定ActionForm Bean中需要进行验证的字段的名字
Depends 指定字段的验证规则,多个规则之间以逗号隔开。
<field>元素也包含一些子元素,它的DTD定义如下:
<!element field(msg?,arg0?, arg1?, arg2?, arg3?,var*)>
6.<msg>
<field>元素的<msg>子元素指定验证规则的对应的消息文本。该消息文本将替代在validator-rules.xml文件中为验证规则配置的默认的消息文本。例如:
<field property=”phone” depends=”required,mask,minlength”>
<msg name=”mask” key=”phone.invalidformat”/>
….
</field>
以上代码的<msg>元素表明,当”mask”验证规则验证失败时,错误消息文本来自于 Resource Bundle,消息key为 “phone.invalidformat”.
<msg>元素有三个属性, DTD定义如下:
<!ATTLIST msg name CDATA#IMPLIED
key CDATA#IMPLIED
resource CDATA#IMPLIED >
对<msg>元素的属性做说明。
属性 描述
Name 指定验证规则的名字
Key 当resource属性为true时,key属性指定消息key,该消息key应该在Resource Bundle中存在,当resource属性为true时,属性直接指定消息文本
Resource 当此项为true时,表示使用来自 Resource Bundle的消息,如果为false,表示直接在key属性中设置消息文本,默认值为true
7.<arg>元素
<field>元素可以包含四个附加的子元素:<arg0><arg1><arg2><arg3>,用于替换复合消息中的参数。<arg0>元素指定第一个替换值,<arg1>指定第二个值,依次类推。每个arg元素包含三个属性:name、key和resource,这些属性用法和<msg>元素很相似。
包含<arg0><arg1>元素的<field>元素
<field
Property=”phone”
depends=”required,mask,minlength”
<arg0 key=”label.phone”/>
<arg1 name=”minlength” key=”${var:minlength}” resource=”false”/>
<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>7</var-value>
</var>
以上代码没有配置<msg>元素,因此当某个验证规则失败时,将使
用在validator-rules.xml中配置的默认消息文本。例如,如果
minlength验证规则失败,则validator-rulex.xml中设置的消息
key为”errors.minlength”:
<validator
name=”minLength”
…..
Msg=”errors.minlength”
</validator>
在资源文件中与errors.minlength匹配的中文消息文本为:
errors.minlength={0}不能少于{1}字符
<arg0>元素没有设置name属性,因此适用于所有验证规则,它将取
代以上复合消息中的第一个参数{0},<arg0>元素的key属性
为”label.phone”,在资源文件中与之匹配的中文消息文本为:
label.phone=电话
<arg1>元素的name属性为”minlength”,表示仅适用
于”minlength”验证规则。它将取代以上复合消息中的第二个参数
{1}.<arg1>元素的resource属性为false,表明此时key属性直接指
定文本。key属性值由变量${var:minlength}决定,此处值为7.
当”minlength”验证规则验证失败时,<arg0>和<arg1>元素将分别
取代以上复合消息中的两个参数。
8.<var>元素
<field>元素还可以包含零个或多个<var>元素。<var>元素用来向验
证规则传递参数。
<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
phone常量的值为”^\d{8}\d*$”,它定义了一种字符模式,表示字
符串长度为8位,并且只能包含数字字符。mask验证规则能够比较
用户输入的phone字段是否和指定的字符模式匹配。
<arg>元素也可以访问<var>元素,语法为${var:var-name},例如:
<arg1 name=”minlength” key=”${var:minlength}” resource=”false”/>
<var>
<var-name>minlength</var-name>
<var-value>7</var-value>
</var>
Validator插件
为了在Struts框架中使用Validator,可以采用插件机制把Validator加入到框架中。这需要在Struts配置文件中配置ValidatorPlugIn插件,代码如下:
<plug-in className=”org.apache.struts.validator.ValidatorPlugIn”>
<set-property
propery=”pathnames”
value=”/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml”/>
</plug-in>
当应用启动时,Struts框架会加载ValidatorPlugIn插件并调用它的init()方法。init()方法根据pathnames属性,加载相应的validator-rules.xml和validation.xml文件,把验证信息读入到内存中。
Validator框架和ActionForm
Validator框架不能用于验证标准的org.apache.struts.action.ActionForm类。如果要使用Validator框架,应该采用ActionForm类的两个子类:org.apache.struts.validator.DynavalidtorForm和org.apahce.struts.validator.ValidatorForm。ActionForm类及其子类的框图如图:
DynaValidatorForm支持在动态ActionForm中使用Validator框架,ValidatorForm支持在标准ActionForm中使用Validator框架。无论是对于动态ActionForm还是标准ActionForm,配置Validator框架的方式都是一样的。
DynavalidatorForm和ValidatorForm类都实现了validate()方法,所以当创建他们的子类时,不必再覆盖validate()方法。validatorForm类的validate()方法的代码如下:
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){
ServletContext application = getServlet().getServletContext();
ActionErrors errors = new ActionErrors();
String validationKey = getValidationKey(mapping,request);
Validator validator = Resources.initValidator(validationKey, this,application,request,error,page);
try{
validatorResults = validator.validate();
}catch(ValidatorException e){
log.error(e.getMessage(),e);
}
return errors;
}
以上validate()方法调用验证框架的验证方法进行验证,如果验证失败,就会创建包含错误消息的ActionMessage对象,并把该对象添加到ActionErrors集合对象中。validate()方法最后返回ActionErrors对象。
ValidatorForm有一个子类ValidatorActionForm。下图指示为这两种类的区别。
Validator框架提供这两种类的目的在于可以更加精确的控制执行验证条件。例如,
假定有个名为“editForm”的表单对应两个Action:saveAction和cancelAction,如图:
假定editForm表单包含两个验证规则:验证A和验证B。如果对于用的保存或取消动作,都要执行两个验证,则可以创建一个扩展ValidatorForm类的EditForm类,然后再validation.xml中作如下配置:
<formset>
<form name=”editForm”>
验证规则A
验证规则B
</form>
…….
</formset>
如果对于用户的保存动作,仅执行验证规则A,对于取消动作,仅执行验证规则B,则可以创建一个扩展ValidatorActionForm类,然后再validation.xml中作如下配置:
<formset>
<form name=”/save”>
验证规则A
</form>
<form name=”/cancel”>
验证规则B
</form>
…..
</formset>
对于动态ActionForm,也有DynaValidatorForm和DynaValidatorActionForm之分,它们的区别于ValidationForm和ValidatorActionForm的区别一样。
分享到:
相关推荐
国民经济行业分类与国际标准行业分类(ISIC+Rev.4)的对照和匹配(供参考).docx
网络助手工具(亲测好用)
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
这是一款基于jQuery+HTML5实现的微信大转盘抽奖效果源码,是一款可配置奖品抽奖的jQuery大转盘抽奖代码,可实现点击按钮转轮旋转实现抽奖功能,效果逼真自然,是一款非常优秀的特效源码
自动驾驶控制-基于MPC的速度控制仿真 matlab和simulink联合仿真,基于mpc算法的速度控制,跟踪阶跃形式的速度和正弦形式的速度。
求解 2D 和 3D 分数矢量亥姆霍兹方程,用于非刚性图像配准Matlab代码.rar
springboot103抗疫物资管理系统,含有完整的源码和报告文档
这是2023年华南理工大学机器人校内赛五山五狼—车车难造队的机械建模开源,我是本队机械建模队员杨欣然_-
将多个图像显示为子图的蒙太奇Matlab代码.rar
labview源码参考示例,可供参考学习使用
内容概要:本文档主要聚焦于2024年秋季学期高维数据分析课程的第六次作业,涉及多个关于复杂网络分析的重要概念和技术。具体涵盖:基于图论的基本证明如节点度与共同邻居的数学表达形式;对网络社区结构进行划分,并通过模态性公式评价这种划分的效果;针对实际社交网络数据集利用随机块模型和社会经济回报模型(SCORE)来进行高效的社区识别任务;以及深入探讨了矩阵的核范数及其与谱范数间的关系,强调了它们在解决现实生活中大型稀疏矩阵问题方面的重要性。 适合人群:面向正在学习数据挖掘、机器学习等相关专业的大三及以上的学生,特别是有兴趣深入了解图论及其在网络科学中具体应用的研究人员。 使用场景及目标:该文档用于帮助学生更好地掌握高维数据分析技巧,在实际项目实践中提高解决问题的能力。通过本练习可以加深对于社交网络构建、模块化计算方法的认识,同时也能加强对线性代数里关键概念的理解。这对于准备从事数据分析相关工作或进一步深造的同学非常有益。 其他说明:这份PDF材料包含了大量详细的数学推导步骤,以及具体的评分标准和作业完成时间限制(截止日期:12月29日星期日晚上十点)。为了更好地完成这门课的任务,建议配合教科书和其他参考资料一起使用,鼓励学生积极思考每个问题背后的原理。
教育培训机构劳动合同
①数据来源:自己从cnrds数据库下载的原始数据,未做任何处理 ②数据年份:不同表格不一致,很多表格比如上市公司绿色专利申请与获得都是从1991年开始的,目前除了引用里的被引用信息更新到23年11月底,其余均更新到23年底 ③数据内容:两个表格 数据清单: 各省市绿色专利申请与获得(内部是地级市) 各省市绿色专利申请情况 各省市绿色专利获得情况
毕业设计-基于Java+SpringBoot的校园互助系统微信小程序源码+数据库.zip文件 该项目是个人项目源码,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!!!评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 该项目是个人项目源码,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!!!评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于微信小程序的校园互助系统源码+数据库.zip文件 该项目是个人项目源码,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!!!评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于微信小程序的校园互助系统源码+数据库.zip文件 该项目是个人项目源码,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运
springboot128中小企业人事管理系统代码,含有完整的源码和报告文档
管理员功能 用户管理 管理各类用户(社团负责人、会员)的注册、审核、修改和删除。 设置不同角色的权限,确保系统安全性。 社团管理 创建、编辑和删除社团信息,包括社团名称、简介、活动类型等。 审核新申请的社团,并管理社团的状态(正常、暂停、注销)。 活动管理 发布、编辑和删除社团活动信息,包含活动主题、时间、地点和参与人数。 查看活动报名情况和参与者列表。 财务管理 管理社团资金,包括收支记录、预算编制和财务报表生成。 支持费用报销流程,审核并记录社团开支。 数据统计与报告 生成各类统计报告,如社团活动参与情况、会员增长趋势等。 分析社团运营状况,为决策提供数据支持。 社团负责人功能 社团管理 查看和编辑社团基本信息及介绍,更新社团动态。 管理社团内的成员,包括添加、移除和调整角色。 活动策划 创建新活动,设置活动细节(时间、地点、内容、报名方式)。 发布活动通知,通过系统推送给社团成员。 报名管理 查看活动报名情况,管理参与人员名单。 发送活动提醒与通知,确保会员及时了解活动信息。 沟通交流 使用内部消息系统与社团成员进行沟通,发布公告和通知。 建立论坛或讨论区,促进
低通滤波器 滤波算法 滤波
基于滑膜控制smc的3辆协同自适应巡航控制,上层滑膜控制器产生期望加速度,下层通过油门和刹车控制车速,实现自适应巡航控制。 个人觉得从结果图中看出基于滑膜控制的效果非常好,不亚于模型预测控制mpc 并且在实车试验很方便。 文件包含acc巡航建模资料和滑膜控制的资料,还有详细教你运行仿真的步骤,非常的详细,比一般只给文件仿真详细多啦,还有我本人滑膜控制的总结,对于滑膜控制的学习很有帮助。
foc滑膜观测器(SMO+PLL)matlab模型,仿真里面是直接0速闭环启动的效果,当然这是仿真,应用到硬件肯定要加开环启动,目前已经在M4的硬件中实现了,效果还不错,现在出这个模型,matlab 的版本是2021b
springboot158基于springboot的医院资源管理系统,含有完整的源码和报告文档