在JSF 2中对定制验证器进行参数化

在JSF 2中编写自定义验证器并不复杂。 您实现Validator接口,添加@FacesValidator批注,并在faces-config.xml中插入Validator声明, 仅此而已 。 一块蛋糕。 但是,让我们考虑以下情形:

您需要自定义日期验证器,比方说检查rich:calendar中的日期是否不是过去的日期。 因此,我们在日历组件中放置了验证器。

<rich:calendar value="#{fieldValue}" id="dateField" datePattern="yyyy/MM/dd"><f:validator validatorId="dateNotInThePast"/></rich:calendar>

我们的验证器可能如下所示:

@FacesValidator("dateNotInThePast")
public class DateNotInThePastValidator implements Validator {@Overridepublic void validate(FacesContext facesContext, UIComponent uiComponent, Object value)throws ValidatorException {if (ObjectUtil.isNotEmpty(value)) {checkDate((Date)value, uiComponent, facesContext.getViewRoot().getLocale());}}private void checkDate(Date date, UIComponent uiComponent, Locale locale) {if(isDateInRange(date) == false) {ResourceBundle rb = ResourceBundle.getBundle("messages", locale);String messageText = rb.getString("date.not.in.the.past");throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,messageText, messageText));}}private boolean isDateInRange(Date date) {Date today = new DateTime().withTime(0, 0, 0, 0).toDate();return date.after(today) || date.equals(today);}
}

如果我们在属性文件中提供键值,我们将看到类似以下内容:

因此,看来我们已经可以使用生产就绪的自定义验证器。

问题

但是,当我们的表格变得越来越复杂时,我们可能会遇到以下屏幕上描述的问题:

因此,问题在于用户如何确定哪个日期有效和哪个日期无效? 我们的验证器使用相同的属性键来显示两个错误消息。

解决方案

我们需要以某种方式向我们的自定义验证器提供已验证字段的标签。 而且,对于JSF而言,令人惊讶的是,它可以很容易地实现。 唯一的问题是您必须知道如何做 :)

因此,在Java Server Faces中,我们可以对具有属性( f:attribute标签)的组件进行参数化。 因此,我们将属性添加到rich:calendar,然后在分配给此日历字段的验证器中读取此传递的值。 因此,现在我们的日历组件应如下所示:

<rich:calendar value="#{fieldValue}" id="dateField" datePattern="yyyy/MM/dd"><f:validator validatorId="dateNotInThePast"/><f:attribute name="fieldLabel" value="Date field 2" /></rich:calendar>

在我们的验证器Java类中,我们可以使用uiComponent.getAttributes()。get(“ fieldLabel”);获得此值

private void checkDate(Date date, UIComponent uiComponent, Locale locale) {if(isDateInRange(date) == false) {ResourceBundle rb = ResourceBundle.getBundle("messages", locale);String messageText = getFieldLabel(uiComponent) +" " + rb.getString(getErrorKey());throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,messageText, messageText));}}protected String getFieldLabel(UIComponent uiComponent) {String fieldLabel = (String) uiComponent.getAttributes().get("fieldLabel");if(fieldLabel == null) {fieldLabel = "Date" ;}return fieldLabel;}

我们错误的属性值应为过去的值,因为日期或字段标签将添加到错误消息的开头。

工作示例应显示与此屏幕类似的内容:

参考:来自Code Hard Go Pro博客的JCG合作伙伴 Tomasz Dziurko 在JSF 2中对定制验证器进行参数化

相关文章 :

  • Java EE过去,现在和云7
  • JBoss AS 7.0.2“ Arc”发布–使用绑定选项
  • 那些邪恶的框架及其复杂性
  • 真正的模块化Web应用程序:为什么没有开发标准?
  • 编程反模式
  • Java教程和Android教程列表

翻译自: https://www.javacodegeeks.com/2011/10/parametrizing-custom-validator-in-jsf-2.html

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

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

相关文章

python绘制散点图的函数_python matplotlib更新函数的散点图

有几种方法可以对matplotlib图进行动画处理.在下文中,我们将使用散点图查看两个最小示例. (a)使用交互式模式plt.ion() 要进行动画制作,我们需要一个事件循环.获取事件循环的一种方法是使用plt.ion()(“交互式打开”).然后需要首先绘制图形,然后可以循环更新绘图.在循环内部,我…

偷学来的资料

--矛盾 fis3的pngcrush不支持你的node版本v4.4.0 换成4.2.4就可以了. --工具 淘宝 NPM 镜像:http://npm.taobao.org/ FIS2 to FIS3:https://github.com/fex-team/fis3/blob/master/doc/docs/fis2-to-fis3.md fis3demo:https://github.com/fex-team/fis3-demo --前端blog/网站 廖…

Java EE6事件:JMS的轻量级替代品

我今天要讨论的功能是Java EE 6中的事件机制。一般的想法是触发一个事件&#xff0c;并让事件监听器来接收它。 我创建了这个完全没有用的示例&#xff0c;但是它的简单性帮助我专注于重要的内容。 我将从后备操作中触发LogEvent&#xff0c;该事件将记录到java.util.Logger中。…

STM32F1笔记(七)WWDG窗口看门狗

窗口看门狗与独立看门狗最大的不同是中断&#xff0c;窗口看门狗拥有一个提前唤醒中断。也就是在快要产生复位的前一段时间&#xff08;T[6:0]0x40&#xff09;来提醒需要进行喂狗&#xff0c;否则将复位。因此当窗口看门狗的计数器值减到0x40的时候&#xff0c;产生中断&#…

求助!求助!网站页面图片太多,加载时间太长该怎么办?

以下是百度统计的诊断&#xff0c;小弟万般无奈&#xff0c;html上的缓存以及图片处理技巧欠缺&#xff0c;希望各位大大帮帮忙支个招&#xff01; 以下元素可在不损失原信息量的前提下进行压缩&#xff1a; http://www.5atl.com/Style/main.css &#xff08;大小&#xff1a; …

groovy怎样从sql语句中截取表名_Mysql和SQL

基本概念1.数据库DataBase简称&#xff1a;DB2.什么数据库&#xff1f;——用于存储和管理数据的仓库。存储过程是一个预编译的SQL语句&#xff0c;优点是允许模块化的设计&#xff0c;就是说只需创建一次&#xff0c;以后在该程序中就可以调用多次。3.数据库的特点&#xff1a…

使用java.util.prefs.Preferences代替java.util.Properties

典型的应用程序安装程序需要向用户询问几个选项&#xff0c;其中一些是配置问题&#xff0c;例如&#xff0c;应用程序应在其上运行的端口&#xff0c;应如何运行等。应用程序必须记住这些选项&#xff0c;并在每个选项中使用它们。跑。 解决此问题的标准方法是将这些选项写入属…

STM32F1笔记(八)时钟

STM32有五种时钟源 1、HSI。高速内部时钟&#xff0c;RC振荡器&#xff0c;频率为8MHz。 2、HSE。高速外部时钟&#xff0c;可接石英/陶瓷谐振器&#xff0c;或者借外部时钟源&#xff0c;频率范围为4MHz~16MHz。 3、PLL。锁相环倍频输出&#xff0c;其时钟输入源可选择为HS…

java常用工具类(一)

一、String工具类 package com.mkyong.common; import java.util.ArrayList; import java.util.List; /** * * String工具类. <br> * * author 宋立君 * date 2014年06月24日 */ public class StringUtil { private static final int INDEX_NO…

Oracle定时器调用存储过程

关于Oracle定时器调用存储过程的一点总结&#xff0c;如果有不足的地方&#xff0c;希望大家多多指导&#xff0c;也是第一次在博客上写东西&#xff0c;以前也只是自己总结之后放在硬盘了&#xff0c;后来同事告诉自己&#xff0c;其实写博客可以获得很多&#xff0c;不管是知…

python可以下载百度文库_不用下载券也能下载百度文库资料,Python帮你轻松搞定...

大家可能平时都有在百度文库下载文档的经历&#xff0c;费尽心思好不容易在文库找了一份可以用的资料&#xff0c;一看需要用下载券下载&#xff0c;搞的人很烦。 有的人为了节省时间&#xff0c;就任性办理了个文库VIP&#xff0c;再也不用纠结怎么下文档了。如果你是一个百度…

将对象映射到多个XML模式–天气示例

我已经在EclipseLink JAXB&#xff08;MOXy&#xff09;的XmlPath和外部绑定文件扩展中撰写了以前的文章。 在本文中&#xff0c;我将通过将单个对象模型映射到两个不同的XML模式来演示这些扩展的功能。 为了使示例更加“真实”&#xff0c;XML数据将来自提供天气信息的两种不同…

STM32F1笔记(九)通用定时器

STM32F1的定时器分为TIME1/8等高级定时器&#xff0c;TIME2~5等通用定时器&#xff0c;TIME6/7基本定时器。三者的区别主要参考《STM32中文参考手册》里特性的每种定时器主要特性的异同。 先看中文手册中通用定时器的简介&#xff1a; 通用定时器的寄存器有一个比较有趣的地方…

佳能MP258的5200错误和P08代码解决方法及清零方法

参考文章转载于:https://www.cnblogs.com/arcer/p/5659624.html

tomcat通过conf-Catalina-localhost目录发布项目详解

转自&#xff1a;http://www.cnblogs.com/iyangyuan/p/3316444.html&#xff0c;感谢 杨元。 Tomcat发布项目的方式大致有三种&#xff0c;但小菜认为通过在tomcat的conf/Catalina/localhost目录下添加配置文件&#xff0c;来发布项目&#xff0c;是最佳选择。 因为这样对tomca…

c++保存图标到dll_自动保存邮件附件至指定文件夹

最近有个需求&#xff0c;ERP系统会自动发很多csv附件到我邮箱&#xff0c;我需要把这些附件上传到FTP服务器&#xff0c;服务器会把这些csv的数据写到另外一个系统的数据库。每次大概有30个邮件&#xff0c;每个邮件有一个附件&#xff0c;而且附件的名字都一样&#xff0c;是…

有时在Java中,一个布局管理器是不够的

在开发Java Swing应用程序时&#xff0c;最经常的是&#xff0c;我们需要在多个嵌套面板中使用多个布局管理器。 通常这不是问题&#xff0c;并且被认为是几乎所有人类已知语言的所有UI开发的常规做法。 但是&#xff0c;大多数情况下&#xff0c;对于UI中的每个面板&#xff0…

VM克隆之后启动eth0找不到eth0:unknown interface:no such device

问题出现&#xff1a;VMware 克隆之后&#xff0c;ifconfig命令执行找不到eth0,报错 eth0:unknown interface:no such device 是因为/etc/sysconf/network-scripts/ifcfg-eth0配置复制过来和虚拟主机的网卡Mac等信息不匹配 解决方法&#xff1b; 删除/etc/udev/rules.d/70-pers…

“精彩极了”和“糟糕透了”

虽然已经是25岁&#xff0c;但是对小学的一篇课文依然记忆尤新&#xff0c;《“精彩极了”和“糟糕透了”》。 课文正文 记得七八岁的时候&#xff0c;我写了第一首诗。母亲一念完那首诗&#xff0c;眼睛亮亮的&#xff0c;兴奋地嚷着&#xff1a;“巴迪&#xff0c;真是你写的…

python中print的用法_Python中print函数简单使用总结

Python中print函数简单使用总结 print函数是Python的入门&#xff0c;每一个学习python的人都绕不开这个函数&#xff0c;下面介绍一下这个函数的用法。 打开电脑&#xff0c;选择python软件&#xff0c;下面选择python 3.7为例进行介绍&#xff0c;点击python 3.7&#xff0c;…