日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

必填字段的自定义JSF验证器

發(fā)布時間:2023/12/3 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 必填字段的自定义JSF验证器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實現EditableValueHolder接口的JSF組件具有兩個屬性“ required”和“ requiredMessage” –一個標志,指示用戶需要輸入/選擇非空值,以及一個用于驗證消息的文本。 我們可以使用它,但是它不夠靈活,我們不能直接在視圖中(facelets或jsp)對消息進行參數化,我們必須做一些適當的消息定制。 附加到任何必填字段的自定義驗證器如何處理? 我們將寫一個。 首先,我們需要在標簽庫中注冊這樣的驗證器。 <?xml version='1.0'?> <facelet-taglib version='2.0' ... ><namespace>http://ip.client/ip-jsftoolkit/validator</namespace><tag><tag-name>requiredFieldValidator</tag-name><validator><validator-id>ip.client.jsftoolkit.RequiredFieldValidator</validator-id></validator><attribute><description>Resource bundle name for the required message</description><name>bundle</name><required>false</required><type>java.lang.String</type></attribute><attribute><description>Key of the required message in the resource bundle</description><name>key</name><required>false</required><type>java.lang.String</type></attribute><attribute><description>Label string for the required message</description><name>label</name><required>false</required><type>java.lang.String</type></attribute></tag> </facelet-taglib>

為了獲得高度的靈活性,我們定義了三個屬性。 一個簡單的用法是

<h:outputLabel for='myInput' value='#{text['myinput']}'/> <h:inputText id='myInput' value='...'><jtv:requiredFieldValidator label='#{text['myinput']}'/> </h:inputText>

驗證器類本身并不困難。 根據'key'參數(所需消息的密鑰)和'label'參數(對應標簽的文本),有四種情況下如何獲取消息。

/*** Validator for required fields.*/ @FacesValidator(value = RequiredFieldValidator.VALIDATOR_ID) public class RequiredFieldValidator implements Validator {/** validator id */public static final String VALIDATOR_ID = 'ip.client.jsftoolkit.RequiredFieldValidator';/** default bundle name */public static final String DEFAULT_BUNDLE_NAME = 'ip.client.jsftoolkit.validator.message';private String bundle;private String key;private String label;@Overridepublic void validate(FacesContext facesContext,UIComponent component, Object value) throws ValidatorException{if (!UIInput.isEmpty(value)) {return;}String message;String bundleName;if (bundle == null) {bundleName = DEFAULT_BUNDLE_NAME;} else {bundleName = bundle;}if (key == null && label == null) {message = MessageUtils.getMessageText(MessageUtils.getResourceBundle(facesContext, bundleName),'jsftoolkit.validator.emptyMandatoryField.1');} else if (key == null && label != null) {message = MessageUtils.getMessageText(MessageUtils.getResourceBundle(facesContext, bundleName),'jsftoolkit.validator.emptyMandatoryField.2', label);} else if (key != null && label == null) {message = MessageUtils.getMessageText(MessageUtils.getResourceBundle(facesContext, bundleName), key);} else {message = MessageUtils.getMessageText(MessageUtils.getResourceBundle(facesContext, bundleName), key, label);}throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_WARN, message, StringUtils.EMPTY));// getter / setter... } }

MessageUtils是一個實用程序類,用于獲取ResourceBundle和消息文本。 我們在資源包(屬性文件)中還需要兩個文本

jsftoolkit.validator.emptyMandatoryField.1=Some required field is not filled in. jsftoolkit.validator.emptyMandatoryField.2=The required field '{0}' is not filled in.

以及web.xml中的以下上下文參數

<context-param><param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name><param-value>true</param-value> </context-param>

這種解決方案并不理想,因為我們需要兩次定義標簽文本(如#{text ['myinput']}),并將驗證器附加到要驗證的每個字段。 下一篇文章中將提供一個針對多個字段的更好的通用驗證器。 敬請關注!

參考:來自JCG合作伙伴 Oleg Varaksin的必填字段的自定義JSF驗證器,位于“ 軟件開發(fā)思想”博客上。


翻譯自: https://www.javacodegeeks.com/2012/05/custom-jsf-validator-for-required.html

總結

以上是生活随笔為你收集整理的必填字段的自定义JSF验证器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。