web.xml.jsf_使用JSF 2.0可以更轻松地进行多字段验证

web.xml.jsf

开发应用程序表单时最常见的需求之一是多字段验证(或跨字段验证,但我没有使用此术语,因为当我将其放在Google上时,实际上得到了一些战后图片)。 我正在谈论的情况是,我们需要比较初始日期是早于结束日期还是值小于另一日期。 这不是在每个面向业务的框架中都有明显的功能吗? 并不是的。
不幸的是,JSF规范默认情况下不支持它。 因此,直到最新的生产版本( JSR 245 – JSF 2.1),JSF才提供现成的多字段验证功能。
由于JSR 344提到了“多字段验证”,因此我们可能希望在JSF 2.2中有所收获 。 同时,开发人员利用了他们卓有成效的创造力来实施他们的解决方案。 您可以在Stackoverflow.com上找到许多可行的替代方案; 人们创建自己的组件 ; 在Java EE之上构建的框架试图覆盖此功能; 还有很多其他情况。

我不喜欢找到的任何解决方案。 有些很复杂,有些则不太优雅。 因此,我决定也要有创造力,并尝试一个更简单的解决方案,以便在重构时间到来时易于理解和更改。 这并不意味着我提出的建议比其他建议要好。 我只是提出一些更简单的建议。

在以下示例中,我检查分配的预算是否小于预算限制。 如果不是,则向用户显示一条消息。 该示例仅考虑两个字段,但是可以根据需要扩展到任意多个字段。

步骤1:在托管bean中为每个要验证的字段创建一个属性:

以下属性专用于多字段验证。

private BigDecimal allocatedBudget;
private BigDecimal budgetLimit;

在此示例中,我在名为MBean的类中进行编码,并用@ManagedBean和@RequestScoped进行了注释。

步骤2:在相同的托管bean中为每个字段创建一个验证方法

此解决方案考虑在托管bean中实现的验证方法,而不是接口javax.faces.validator.Validator的实现。 只要定义三个标准参数,即FacesContext,UIComponent和代表该字段中输入值的Object,就可以为验证方法命名。 只有该值对我们的验证有用。 请参阅验证方法:

public void validateAllocatedBudget(FacesContext context,UIComponent component, Object value) {this.validationAllocatedBudget = (BigDecimal) value;
}public void validateBudgetLimit(FacesContext context,UIComponent component, Object value) {this.validationBudgetLimit = (BigDecimal) value;if(this.validationBudgetLimit.compareTo(this.validationAllocatedBudget) < 0) {throw new ValidatorException(new FacesMessage("Invalid allocated budget!");}
}

validateAllocatedBudget方法不会验证分配的预算。 它只是将属性validationAllocatedBudget设置为允许其值在以后使用。 有可能因为验证方法的调用顺序与在JSF代码中声明的顺序相同。 因此,您可以为验证所涉及的每个字段创建一个简单的方法。 有效的验证发生在方法validateBudgetLimit中,该方法是JSF文件中最新调用的验证方法,因此也是最后一个要执行的方法。

最好以表单中字段的相同顺序声明属性和验证方法。 该顺序不会影响算法的功能,但有助于理解逻辑。 另一方面,JSF文件中的调用顺序很重要。

步骤3:使用参数验证器来引用验证方法

从下面的字段中调用上述方法。 请记住,属性和方法是在类MBean中实现的。

<h:outputLabel for="allocBudget" value="Allocated Budget"/>
<h:inputText id="allocBudget" label="Allocated Budget"value="#{mBean.operation.allocatedBudget}"validator="#{mBean.validateAllocatedBudget}"/><h:outputLabel for="budgetLimit" value="Budget Limit"/>
<h:inputText id="budgetLimit" label="Budget Limit"value="#{mBean.operation.budgetLimit}"validator="#{mBean.validateBudgetLimit}"/>

参考: Hildeberto博客博客中的JCG合作伙伴 Hildeberto Mendonca提供的使用JSF 2.0的更轻松多字段验证 。

翻译自: https://www.javacodegeeks.com/2012/12/easier-multi-field-validation-with-jsf-2-0.html

web.xml.jsf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

odoo self.ensure_one()

源码&#xff1a; def ensure_one(self): """ Verifies that the current recorset holds a single record. Raises an exception otherwise. """ try: # unpack to ensure there is only one value is faster than len when…

模板 字段_劲爆新功能:轻流文字识别(OCR)功能支持自定义识别模板啦

Hi&#xff0c;又和大家见面啦&#xff5e;前段时间我们的文字识别(OCR)功能推出后&#xff0c;由于只支持系统提供的固定识别模板&#xff0c;很多客户跟我们反馈说&#xff1a;希望可以自定义识别模板&#xff01;现应大家的要求&#xff0c;轻流「文字识别(OCR)」的「自定义…

中文字符频率统计python_python统计字符串出现最多的字母及其出现次数

统计字符串出现最多的字母及其出现次数 另外如果次数相同按字母顺序排序。 方法1 可以使用自定义键对c.most_common()进行排序&#xff0c;该键首先考虑频率的降序&#xff0c;然后考虑字母的降序&#xff08;请注意lambda x: (-x[1], x[0]) &#xff09;&#xff1a; from col…

c#float取小数点后两位_C# 保留小数点后两位(方法总结)

最简单使用: float i=1.6667f; string show=i.ToString("0.00"); //结果1.67(四舍五入) 其他类似方法: string show=i.ToString("F");//"F2","f" 不区分大小写 string show=String.Format("{0:F}",i);//也可以为F2,或者&q…

Java 9中的进程处理

一直以来&#xff0c;用Java管理操作系统进程都是一项艰巨的任务。 这样做的原因是可用的工具和API较差。 老实说&#xff0c;这并非没有道理&#xff1a;Java并非出于此目的。 如果要管理OS进程&#xff0c;则可以使用所需的Shell&#xff0c;Perl脚本。 对于面临更复杂任务的…

拼音缩写是啥意思_NMSL?AWSL?这些拼音缩写到底是啥意思?

我绝对没有在骂你们&#xff0c;我只是单纯的举个例子而已。我们在网上冲浪时经常可以看到这些几个字母组成的拼音缩写&#xff0c;对于知道这些梗的人一眼就能GET到&#xff0c;但对于不明白的人来说猜来猜去也猜不出啥意思。所以今天就来给大家科普几个经常出现的拼音缩写&am…

python利用自动识别写模块_序章:资料预处理(python3.6 可用fortran unformatted sequencial data读取模块)...

首先我只是一个接触Python约半年的菜鸟&#xff0c;开这一个专栏的目的主要是记录自己所学&#xff0c;以及实践的一些有用的东西&#xff0c;顺便分享一些自己写的公用代码段以方便具有同样想法的朋友。 既然是序章我就多写一些吧&#xff0c;我本人对人工智能在气象方面的应用…

python自然场景文字识别_chineseocr

本项目基于yolo3 与crnn 实现中文自然场景文字检测及识别master分支将保留一周&#xff0c;后续app分支将替换为master实现功能文字方向检测 0、90、180、270度检测(支持dnn/tensorflow)支持(darknet/opencv dnn /keras)文字检测,支持darknet/keras训练不定长OCR训练(英文、中英…

python蟒蛇代码_011 实例2-Python蟒蛇绘制

一、"Python蟒蛇绘制"问题分析 1.1 Python蟒蛇绘制 用程序绘制一条蟒蛇 貌似很有趣&#xff0c;可以来试试 先学会蟒蛇绘制&#xff0c;再绘朵玫瑰花送给TA 设计蟒蛇的基本形状&#xff1a;问题1: 计算机绘图是什么原理&#xff1f; 一段程序为何能够产生窗体&#x…

java知识回顾_Java – 2012年回顾和未来预测

java知识回顾这篇文章将重点讨论2012年发生的大小事件&#xff0c;并展望2013年的一些未来预测。其中一些预测将是诚实的猜测&#xff0c;而另一些则将是诚实的猜测。 好吧&#xff0c;只要说我的“恶魔般”的一面就已经接管了。 因此&#xff0c;我们无需再讨论Java的2012年了…

redis 能不能监听特定的key失效_php监听redis key失效触发回调事件

订单超时、活动过期解决方案&#xff1a;php监听redis key失效触发回调事件Redis 的 2.8.0 版本之后可用&#xff0c;键空间消息(Redis Keyspace Notifications)&#xff0c;配合 2.0.0 版本之后的 SUBSCRIBE就能完成这个定时任务的操作了&#xff0c;定时的单位是秒。1.我们先…

bjd luts_BJD娃娃背后的圈层文化:一个“成品娃”拍出22万元天价!

■ 作者 黑马君 | 黑马品牌(ID&#xff1a;heimapinpai)现如今“Z世代”已经成为品牌营销中不可忽略的一个关键词&#xff0c;作为消费升级浪潮的主力军&#xff0c;他们早已成为品牌重点目标人群。与90后、80后不同&#xff0c;Z世代成长于互联网迅猛发展的时代&#xff0c;追…

javaweb 需要对表格建立实体类吗_如何采用java界面编程建立一个表格

5.总体代码&#xff1a;为了便于大家复制&#xff0c;下面给出完整的程序代码&#xff0c;如下&#xff1a;package ArrayCreateTable;import javax.swing.table.*;import java.awt.BorderLayout;import java.awt.GridLayout;import javax.swing.*;public class ArrayCreateTab…

qtcreator版本_【IDE】ROS开发环境之Qt Creator的安装与配置

可以用于ROS开发的IDE很多(可以参考【工具合辑】ROS工程师都在用什么IDE开发呢&#xff1f;用哪种IDE开发更加高效呢&#xff1f; )&#xff0c;ROS的调试依赖环境变量&#xff0c;与外部程序有通讯&#xff0c;因此要求启动IDE的时候加载ROS环境参数&#xff0c;其他方面并无太…

基本API速率限制

您可能正在开发某种形式的&#xff08;Web / RESTful&#xff09;API&#xff0c;并且如果它是面向公众的&#xff08;甚至是内部的&#xff09;&#xff0c;通常您希望以某种方式对其进行速率限制。 即&#xff0c;限制一段时间内执行的请求数&#xff0c;以节省资源并防止滥用…

无人值守安装之cdrom_无人值守安装

第一阶段项目内容&#xff1a;内容配置PXEDHCPvsftp&#xff0c;实现客户端网络安装linux操作系统阶段目的&#xff1a;目的是让你体验如何通过网络引导&#xff0c;安装redhat系统&#xff0c;解决了很多时候没有光驱&#xff0c;却需要装系统的需求。步骤&#xff1a;服务器端…

python函数定义中参数列表里的参数是_python函数参数中的/和*是什么意思?

在python3.8之后函数参数中允许出现/和*号&#xff0c;/用来指明某些函数形参必须使用位置参数而非关键字参数的形式&#xff0c;*出现在函数参数中第一种含义可以表示为可变参数&#xff0c;一般写作*args&#xff1b;对于单独出现在参数中的*参数&#xff0c;则表示&#xff…

python属性和方法的区别_Python中几种属性访问的区别

起步 python的提供一系列和属性访问有关的特殊方法&#xff1a;__get__, __getattr__, __getattribute__, __getitem__ 。本文阐述它们的区别和用法。 属性的访问机制 一般情况下&#xff0c;属性访问的默认行为是从对象的字典中获取&#xff0c;并当获取不到时会沿着一定的查找…

rootfs 制作ubuntu_为n1制作aarcm64/arm64 ubuntu rootfs系统

安装debootstrap和qemu-user-static&#xff1a;apt install apt-transport-https qemu qemu-user-static binfmt-support debootstrap构建ubuntu 18.04系统&#xff0c;基础包为minbase&#xff0c;使用清大的源&#xff1a;qemu-debootstrap --arch arm64 --variantminbase -…

java线程死锁_Java并发:隐藏线程死锁

java线程死锁大多数Java程序员熟悉Java线程死锁概念。 它本质上涉及2个线程&#xff0c;它们彼此永远等待。 这种情况通常是平面&#xff08;同步&#xff09;或ReentrantLock&#xff08;读或写&#xff09;锁排序问题的结果。 Found one Java-level deadlock:"pool-1-t…