在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.pswp.cn/news/374400.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374400.shtml
英文地址,請注明出處:http://en.pswp.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;…