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

jsf 传参数

在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

jsf 传参数

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

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

相关文章

java应该怎么学习?

很多人刚接触java,比较迷茫,下面我简单梳理一下后端的框架,希望你们能对java有个清晰的认识。 java是一种纯面向对象的编程语言,也是三大编程语言之一。java是由sun公司于1995年开发,它被称为“一次编译,处处可用”。 Struts在项目中的作用 Struts 在项目主要起控制作用…

docker安装clickhouse_clickhouse ----入门

clickhouse作为现在流行的数据分析数据库&#xff0c;非常热门。我也眼馋了好久&#xff0c;想先本地单机安装下&#xff0c;网上搜索了好多。也遇到了好多问题。我这边讲述下自己安装的过程。我这边的电脑是mac.第一步是安装docker.执行命令 brew cask install docker。等dock…

树——平衡二叉树插入和查找的JAVA实现

package com.tomsnail.data.tree; /*** AVL二叉平衡树* author tomsnail* date 2015年3月30日 下午4:35:50*/ public class AVLTree {/*** 根节点* author tomsnail* date 2015年3月30日 下午4:36:54*/private AVLNode rootNode;private String bulidType "";/*** 增…

APP推广工具(总结)

全是干活,懂得人慢慢听我道来。 基于友盟+大数据,如有侵权请告知与我。 一、学习、资讯 1.渠道点评 网址:http://qddp.niaogebiji.com/ 简介:渠道点评是专注于广告、营销、推广商务合作渠道资源点评的综合平台,聚合App推广、信息流广告等众多主流推广渠道广告代理商公…

JUnit:使用Java 8和AssertJ 3.0.0测试异常

Java 8的AssertJ 3.0.0发行版比以前更容易测试异常。 在我以前的一篇博客文章中&#xff0c;我描述了如何利用纯 Java 8实现此目的&#xff0c;但是使用AssertJ 3.0.0可能会删除我创建的许多代码。 警告&#xff1a;此博客文章主要包含代码示例。 SUT –被测系统 我们将测试以…

怎么修改_论文查重之后怎么修改?

使用知网论文查重以后&#xff0c;发现论文重复率很高&#xff0c;该怎么办&#xff1f;论文查重后怎么改&#xff1f;今天paperfree小编给大家介绍一下。方法一&#xff1a;重写如果论文存在很高的重复率&#xff0c;都是抄袭别人的论文&#xff0c;我们就可以考虑重写。在重写…

java枚举使用详解

package com.ljq.test;/** * 枚举用法详解 * * author jiqinlin * */ public class TestEnum { /** * 普通枚举 * * author jiqinlin * */ public enum ColorEnum { red, green, yellow, blue; }/** * 枚举像普通的类一样可以添加属性和方法&#xff0c;可以为它添加静态和非静…

js数组再倒数第二个添加元素_归纳JS中数组的使用(一)元素新增和删除

新增元素js中给数组新增元素主要通过2个方法 push 和 unshiftArray.prototype.push功能概述push() 方法将一个或多个元素添加到数组的末尾&#xff0c;并返回该数组的新长度(该方法修改原有数组)。语法arr.push(element1, ..., elementN)关注点新增的元素出现在数组的末尾可以一…

基于谷歌模型gemini-pro 的开发的QT 对话项目

支持的功能&#xff0c;新建对话框&#xff0c;目前发现相关梯子不支持访问谷歌的api 的可能代理设置的不对&#xff0c; QNetworkAccessManager manager;// Set up your requestQNetworkRequest request;request.setUrl(QUrl("https://generativelanguage.googleapis.com…

PS快速将白底图片变为透明图片的解决办法

公司的公章被傻逼老板带到国外去啦&#xff0c;现在还得用公章&#xff0c;就只能拿以前的文件p图啦。 在将白底图片修改为透明图片时&#xff0c;我首先能想到的是简单的利用磁性套索工具选择图片&#xff08;非常细微的操作&#xff09;&#xff0c;但是一不小心就容易出错&a…

Lucene.net站内搜索—5、搜索引擎第一版实现

目录 Lucene.net站内搜索—1、SEO优化 Lucene.net站内搜索—2、Lucene.Net简介和分词 Lucene.net站内搜索—3、最简单搜索引擎代码Lucene.net站内搜索—4、搜索引擎第一版技术储备&#xff08;简单介绍Log4Net、生产者消费者模式&#xff09;Lucene.net站内搜索—5、搜索引擎第…

java ee jms_Java EE6事件:JMS的轻量级替代品

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

All your files have been encrypted

小弟的姑姑家的老板收银的电脑被黑客黑了,我来解决一下,小孩玩游戏玩电脑中的病毒, 方法很多种,仅供参考。 问题邮件截图: 参考方式: 方法一:给对方钱,一般比较贵,还不如重装系统。哈哈。 方法二:下载解密工具,尝试解密恢复数据, Ransomware File Decrypto Too…

8s yaml 配置生成_接口测试框架实战(六) | 配置的数据驱动

《Python 测试开发实战进阶》课程&#xff0c;4 个月挑战 BAT 大厂年薪 50W Offer&#xff0c;文末加群&#xff01;在实际工作中&#xff0c;为了便于维护&#xff0c;对于环境的切换和配置&#xff0c;通常不会使用硬编码的形式完成。在之前文章《多环境下的接口测试》中&…

机房合作(一):我怎样做组长(敢于承担责任)

导读&#xff1a;小组合作开始了&#xff0c;不怕死的我&#xff0c;揽下了组长的活儿。然后开始了我的漫漫长征路。不过&#xff0c;不怕猪一样的组长&#xff0c;咱有神一样的组员。机房合作到现在&#xff0c;真的感激组员的配合以及对我这个猪组长的指点。接下来&#xff0…

使用JAXB和Jackson从XSD生成JSON模式

在本文中&#xff0c;我演示了一种从XML Schema &#xff08;XSD&#xff09;生成JSON Schema的 方法 。 在概述从XML Schema创建JSON Schema的方法的同时&#xff0c;本文还演示了JAXB实现的用法&#xff08;与JDK 9捆绑在一起的xjc版本2.2.12-b150331.1824 [build 1.9.0-ea-b…

成功人士都有的好习惯

人们常问的一个问题是:那些成功的人是如何获得成功的。这个问题的众多答案之一可能就隐藏在他们的日常习惯之中——但这些习惯到底是什么,它们与成功又有什么关系呢? 习惯是指以固定的方式定期进行的实践或行为模式。在这种情况下,意味着成功人士必须采取日常实践,才有可…

有多个python版本_python 多版本共存

有时候需要在同一台机器上安装多个版本的python常见的解决方式如下&#xff1a;一、1. 下载python2.7和python3.7&#xff0c;然后在C盘下新建一个Python文件夹&#xff0c;python2.7安装到 C:\Python\Python27python3.7安装到 C:\Python\Python372. 检查 系统变量中是否有…

Spring Integration完整示例

本文是我们名为“ Spring Integration for EAI ”的学院课程的一部分。 在本课程中&#xff0c;向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们。 接下来&#xff0c;您将深入研究Spring Integration的基础知识&#xff0c;例如通道&#xff0c;转换器和适…

为什么要创业

在这个时代,成为一名企业家比以往任何时候都要容易,技术正在缩小世界,打开市场,让许多人在他们梦想的领域中独辟蹊径。 然而,许多拥有好点子的人却害怕采取行动。不要让自己成为那些后悔没有创业的人。如果你想掌控你的生活,实现你的梦想。那么你就有无数的理由创业,我…