转:创建自定义的validator 2个域的值必须一致。

PHP Swoft2 框架精华系列:Validator 校验器详解 本文深入讲解了 Swoft 2 框架中的 Validator 校验器,包括其基本概念、使用方法及高级技巧。跟随刘杰的技术博客「技术那些事」,全面掌握 Swoft 的数据校验机制,提高开发效率和代码质量。 阅读详情
前言
       早就听说Struts1.1中Validate框架的种种好处,这次借着项目采用了Struts,简单的研究了一下它的用法。在这个过程中体会到了它的好处,但是它也存在着一些小小的问题。在此一并写出与大伙分享。作者使用的环境是Struts1.1。
配置Struts Validation框架
       相信正在阅读本文的读者都是对struts有一定经验的,对于struts到哪去下载、如何安装配置就不必笔者多言。此处仅仅只讨论struts validation框架的安装和配置。通常,我们有2种方法来进行这个过程。
-          方法一:
从struts自带的webapps目录下解压struts-balnk.war到项目的web工程目录。这是最简单创建struts工程的方式,在这个工程中就已经包含了一个struts应用的所有需要的开发包和这些包的基本配置,自然也包含了其中的validation框架。它非常适合在项目的初创阶段,我们所需做的就是在这个空白工程中填点什么就可以了。
-          方法二:
对于已经存在的struts工程,如何添加valiadation框架支持所需的步骤也非常简单。
1.       首先在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>
2.       然后在web-inf目录中创建2个文件validator-rules.xml,validation.xml。(这2个文件也可从struts-balnk.war中获取)。
3.       复制validation框架所需要的类包到web-inf/lib下,这些类包是:common-validator.jar。
这样,我们就可以使用struts的validation框架了。
使用validation框架
       花了这么多工夫作准备就是为了使用它,在这个部分我们来看看它是如何使用的。在struts1.1出现以前,验证是在formbean的validate方法和action的validate方法中进行。在formbean处,我们进行的主要是界面输入的有效性判断,而在action处,主要是业务逻辑的有效性判断。而在1.1提出的validation框架,个人觉得它更着重于formbean的有效性判断。
       Struts的创建者为什么会在struts1.1中提出一个validation框架呢?关于这方面的回答和资料网上已经有太多,归结起来主要就是验证方法的复用、维护、以及开发的效率。在解释之前,通过一个简单的例子来了解validation框架是如何在strtuts中使用的。
问题
       这是一个简单的用户管理程序,使用者可以对用户信息进行相应的CRUD操作(增查改删)。其中用户信息包含用户名称、用户地址、用户描述、用户密码。对于以上的各种操作,约束如下:
-          增加和修改:用户名称、用户地址、用户密码、用户密码确认为必填项,同时密码和确认密码2个域的值必须一致。
-          删除和查询:用户名称为必填项。
解决和使用步骤
       在此,笔者列出struts1.1和之前版本的异同部分,方便读者进行比较和判断。
1.       创建struts项目的基本环境。
²        在1.1中添加了validation框架的支持,参见上一节的做法。
2.       创建相应的页面,确定页面流程(page flow)。
3.       创建相应的formbean:
²        strut1.1版本解决办法:
为了简单起见使用DynaActionForm。又由于使用了validation框架,此处使用DynaValidatorForm。struts-config.xm的内容:
<form-bean name="editForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="id" type="java.lang.Integer"/>
<form-property name="name" type="java.lang.String"/>
     <form-property name="pwd1" type="java.lang.String"/>
     <form-property name="pwd2" type="java.lang.String"/>
<form-property name="address" type="java.lang.String"/>
<form-property name="desc" type="java.lang.String"/>
</form-bean>
然后,修改web-inf目录下的validation.xml文件内容,其中form的名字和各域的名字必须和struts-config.xml中一致:
<form name="/editForm ">
     <field property="name" depends="required">
          <arg0 key="editForm.name"/>
     </field>
     <field property="pwd1" depends="required,mask">
          <arg0 key="editForm.password"/>
          <var>
                <var-name>mask</var-name>
                <var-value>^[0-9a-zA-Z]*$</var-value>
          </var>
     </field>
     <field property="pwd2" depends="required,mask">
          <arg0 key="editForm.password"/>
          <var>
                <var-name>mask</var-name>
                <var-value>^[0-9a-zA-Z]*$</var-value>
          </var>
     </field>
<field property="address" depends="required ">
          <arg0 key="editForm.address"/>
     </field>
</form>
²        1.1之前的解决办法
老老实实地写ActionForm的子类,覆盖validate方法。
4.       创建相应的Action,同时Action的validate属性置为true,以启用validation框架。
5.       书写ApplicationResources.properties,添加错误信息。
²        struts1.1
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.
 
editForm.name= name.
editForm.password= password.
editForm.address= address
²        1.1之前的解决方法,与之类似。
6.       在相应的jsp中添加<html:errors/>。
从整个使用过程来看,就验证部分而言,使用struts1.1的开发效率大大的得到了提高,而且通过validator-rules.xml使验证方法能被不同的formbean复用,而且可维护性也大大的得到提高。通过mask,使得单个页面域的验证非常灵活。
但是细心的读者可能也发现了这个验证文件仅仅指明2个password域是必填的,但并没有满足他们必须是相等的这种情形的判断,对于这一点,我们可使用自定义的validator并将它添加到validator-rules.xml文件中来完成。
创建自定义的validator
       对于validator的创建,可以归结为3步:
1.       创建validator类,validator必须包含一个以valid开始的方法,并且它的函数签名必须如下:
validXXX(java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,  org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest,  javax.servlet.ServletContext)
在本例中,自定义的Validator如下(摘至Struts提供的例子,用来提供2个域的相等性检查):
              public class CustomValidator {
public CustomValidator() {
super();
}
public static boolean validateTwoFields(  Object bean,
ValidatorAction va, Field field, ActionErrors errors, HttpServletRequest request) {
String value = ValidatorUtil.getValueAsString(bean, field.getProperty());
String sProperty2 = field.getVarValue("secondProperty");
String value2 = ValidatorUtil.getValueAsString(bean, sProperty2);
 
if (!GenericValidator.isBlankOrNull(value)) {
try {
if (!value.equals(value2)) {
errors.add( field.getKey(), Resources.getActionError(request, va, field));
return false;
}
} catch (Exception e) {
errors.add( field.getKey(), Resources.getActionError(request, va, field));
return false;
}
}
return true;
}
}
2.       添加到validator-rules.xml文件中:
<validator name="twofields" classname="examples.validator.CustomValidator"
     method="validateTwoFields" methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors, javax.servlet.http.HttpServletRequest"
msg="errors.twofields" />
                   在对应的属性文件中添加对应的消息(errors.twofiled)。
3.       在validation.xml中使用:
<field property="pwd1" depends="required,twofields">
         <arg0 key="editForm.password" />
           <arg1 name="twofields" key=" editForm.password2" />
           <var>
                    <var-name>secondProperty</var-name>
                    <var-value>pwd2</var-value>
           </var>
</field>
         通过自定义validator,validation框架的可扩展性大大的得到提高。而且也使得不同的验证方法能够很好的得到复用
 
hibernate-validator自定义注解 hibernate-validator是属于hibernate的验证器模块,可以使用注解在POJO的字段上进行验证标注 如果需要自定义验证需要以下两步: 1.定义验证器 /** * 手机号码验证器 */ public class PhoneValidator implements ConstraintValidator<Phone,String> { @Overr... 阅读详情

相关推荐

从零开始掌握Python机器学习:七步教程 基础篇

前言 「开始」往往是最难的,尤其是当选择太多的时候,一个人往往很难下定决定做出选择。本教程的目的是帮助几乎没有 Python 机器学习背景的新手成长为知识渊博的实践者,而且这个过程中仅需要使用免费的材料和资源即可。 第一步:基本 Python 技能 如果我们打算利用 Python 来执行机器学习,那么对 Python 有一些基本的了解就是至关重要的。 首先,你需要安装 Python。因为我们后...

hcgx2018的博客 1616

jquery validation - 两个字段其中一个必填

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34364135的博客 1933

3DGS-to-PC实战指南:零代码实现3D高斯场景到点云/Mesh的高效转换

本文详细介绍了3DGS-to-PC工具如何实现3D高斯场景到点云/Mesh的高效转换,无需代码即可完成。通过实战案例和参数调优技巧,帮助用户快速掌握这一开源插件的使用方法,提升3D数据处理效率。特别适合建筑扫描、影视特效等领域的专业人士。

q1w3e5r7t9y的博客 276

推荐开源项目:async-validator - 异步表单验证利器

在Web开发中,高效且精确的表单验证是提升用户体验的关键环节。今天,我们要介绍一个强大的异步表单验证库——**async-validator**,由知名开发者yiminghe打造,它为复杂的前端表单验证提供了简洁而灵活的解决方案。 ## 项目介绍 **async-validator**是一个针对JavaScript环境设计的异步表单验证库,基于高效的异步处理机制,它允许开发者轻松地实现表单项的...

gitblog_00095的博客 1117

鸿蒙【ArkTS】使用TS装饰器封装网络请求HTTP

在HarmonyOS应用开发中,通过HTTP访问网络,可以使用官方提供的@ohos.net.http模块。但是官方提供的直接使用不太好使用,需要封装下才好。这里采用TS的装饰器实现AOP效果 完成前后端接口风格的统一

weixin_60376559的博客 5611

Linux V4L2驱动开发实战:手把手教你用I2C摄像头Sensor注册一个v4l2_subdev

本文详细解析了Linux V4L2驱动开发中I2C摄像头Sensor注册v4l2_subdev的全流程,包括初始化、操作集填充、异步匹配等关键环节。通过实战案例和代码示例,帮助开发者掌握V4L2子系统下的摄像头驱动开发技巧,提升嵌入式Linux系统开发能力。

weixin_30328063的博客 420

springboot Validator实现字段校验

controller 最近学习自定义注解校验真是一堆坑,各种校验不出来,百度一堆堆复制粘贴,找个靠谱的真难,浪费N多时间,记录自己实现的过程,也避免后来者踩坑 一.导包 <!-- 验证器 --> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator<..

一千零二夜的博客 513

装配完整性检查系统:基于YOLOv10的螺丝/零件缺失自动检测(含UI界面与完整代码)

建议自行采集装配场景数据,标注缺失螺丝、错误零件等,模拟真实缺陷。手机/工业相机采集图像;使用LabelImg进行目标标注;转换为 YOLO 格式。本文构建了一个完整的装配完整性检测系统,基于 YOLOv10 实现高精度螺丝缺失检测,并使用 PyQt5 构建了图形界面,实现一键导入与可视化检测流程,适用于工业质检自动化部署。项目可灵活扩展至零件缺失、错装、错位、顺序错误等检测场景,是深度学习在制造业中落地的典型应用案例之一。

YOLO 703

vue中两个或多个input输入框必填一个原来可以这样实现!(输入框二选一必填校验函数+英文数字/中文数字正则)

简单快速实现两个输入框必填一个加正则校验(用校验函数实现两个输入框必填一个,加输入框只能输入中文和数字,另一个只能输入英文和数字)保姆式教学!

sunwenpinglike的博客 6406

20、七鳃鳗繁殖与早期生活史:从水质到养殖的全面解析

本文全面解析了七鳃鳗的繁殖与早期生活史,重点探讨了水质对幼体生存的影响、养殖密度与生长关系、变态过程的时间与大小特征,以及人工繁殖在濒危物种恢复和入侵物种控制中的应用。同时,文章分析了大规模养殖面临的挖掘基质需求、空间限制、清洁管理、疾病防控及微生物环境等挑战,并强调实验室养殖对科学研究和种群管理的重要意义。随着技术进步,未来有望扩展更多物种的繁殖研究,揭示七鳃鳗生物学的进化奥秘,实现资源的可持续利用。

l6m7n8的博客 116

Win11极速安装Tensorflow-gpu+CUDA+cudnn(含视频)

Win11极速安装Tensorflow-gpu+CUDA+cudnn(含视频链接)

weixin_46713695的博客 1万+

Springboot使用Hibernate Validator实现多参数必填其一等自定义校验

Springboot使用Hibernate Validator实现多参数必填其一等自定义校验实现多参数必填其一校验场景解决方式代码实现 实现多参数必填其一校验 项目中有遇到多参数必填其一校验,百度无果后查看Hibernate Validator官方文档1解决了问题。 场景 通过手机号和身份证作为uniqueId来查询到唯一的用户,作为一个类的两个属性,在controller层使用@Validted注解进行参数校验。 解决方式 百度了基本都是@NotBlank等注解加在类的属性上,暂时没有发现好的能校验必填其

TGer_cxy的博客 2741

STM32入门教程:车牌识别

在本文中,我们介绍了如何使用STM32实现车牌识别功能,并提供了详细的代码案例。通过以上步骤,你可以开始开发自己的车牌识别系统了。希望本文对你有所帮助!

2401_85258012的博客 874

【自定义 Validator】

自定义 Validator

weixin_46118731的博客 1369

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

如何为validator.v2创建企业级自定义验证器

validator.v2是Go语言中一款功能强大的结构体字段验证工具,它通过简洁的标签语法为开发者提供了开箱即用的数据验证能力。本文将详细介绍如何为validator.v2创建企业级自定义验证器,帮助你轻松应对复杂的业务规则验证需求。 ## 为什么需要自定义验证器? 在企业级应用开发中,标准验证规则往往无法满足所有业务场景。例如: - 验证邮箱是否属于公司域名 - 检查身份证号码的有效性 -

gitblog_02417的博客 904

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

自定义Java Validator

自定义Java Validator 在项目中,针对汉字的长度计算,数据库和java的计算方式不一致,需要重新处理下java 的 Validator,使其满足项目 建立自定义的 validator annotation @Target({METHOD, FIELD}) @Retention(RUNTIME) @Documented @Constraint(validatedBy = SizeVali...

weixin_34273481的博客 524

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

通过自定义一个 validator,一次搞懂参数校验的全流程流程

自定义个一个validator需要一下4个步骤。我们需要定义一个自定义注解来标记需要进行验证的字段。注解可以包含自定义的属性,用于指定验证规则的细节。例如,我们可以定义一个名为@CustomValidator的注解,并在其中定义一些属性,如错误消息、验证分组等。Class

weixin_45701550的博客 6785

Validator 验证 - 自定义验证

 n         (http://localhost/123/validate/customervalidate/input.jsp)n         在struts1.1中创建一个自定义的验证,验证一个字段的值是否和另一个字段的值相等。1.    创建一个包含一个实现规则接口的静态方法的类。CunstomValidatorRules.java;package com.o

Java之路 5156

SpringMVC Validator 验证器使用方法汇总,自定义validator及使用hibernate-validator

参考:https://www.jianshu.com/p/f65228a5fe3e 1、实现Validator接口,定义验证器直接在方法中使用,定义方法如下,实现supports方法和validate方法: package validator; import domain.Goods; import org.springframework.stereotype.Component; ...

yzy85的专栏 1950

antd form使用pattern和validator自定义校验规则

在使用antd的form表单的时候肯定会用到表单校验,antd的表单校验今天仔细看了下还是很好用的,不仅有默认的一般校验,还支持两种自定义校验规则的方式。 antd有默认的几种校验规则如: enum:枚举类型 len:字段长度 max:最大长度 min:最小长度 required:是否必选 自定义校验规则有两种方式:通过validator方法进行自定义校验 和 使用pattern进行自...

MFWSCQ的博客 3万+

express-validator自定义validator的custom()

使用express-validator进行邮箱(用户名/...)存在性验证时,自定义custom时出了很多问题,遇到的问题有: cannot read property xx invalid value 总是无法通过check,提示错误信息,无论你填的是否正确 点击链接查看express-validator documentation中的详细解释 简单来说custom(validator(...

fish_fisher的博客 1892

spring boot 自定义注解以及validator的使用

1.注解的概念 注解是一种元数据模式。即注解是属于java的一种数据类型,和类、接口、数组、枚举类似。 注解可以用来修饰类、方法、变量、参数、包 注解不会对所修饰的代码产生直接的影响 33 ...

d303577562的博客 1352

在JSF中开发自定义的Validator(一)

JSF中的validatorJSF中,有两种为组件注册validator的方法:1、在组件的标记中直接注册;2、使用标记在组件的标记体中注册。JSF只提供了3中标准的验证器(当然还有一个非空的验证器),但是它们也足够强大了:1、顾名思义是用来验证双精度的数字的2、对输入长度进行验证注意:即使我们指定了组件的size属性,我们还是要使用Length-Validator,这样可以保证客户端和服务器端都

angues1980的专栏 1919

spring boot mvc Validator 自定义校验(枚举值校验)

目录 概述 ...

java_龙 2033

Element Plus 自定义校验 validator 的用法讲解

下面是一个完整的组件结构示例,帮助你理解各个部分如何协同工作。1. 模板部分 (Template)首先,需要正确地绑定modelrules,并为每个需要校验的表单项设置prop。html<template><el-form<el-form-item label="活动名称" prop="activityName"><el-form-item label="年龄范围" prop="age">

BillKu的博客 780

SpringBoot自定义Validator以及EasyExcel导入数据的Validtor校验

SpringBoot自定义Validator以及EasyExcel导入数据的Validtor校验

qq_32650789的博客 589
上一篇: java中xml解析器的应用实例
下一篇: Spring+Hibernate+Struts技术的一个分页程序
eyejava
博客等级 码龄20年 11粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值