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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

primefaces_使用Bean验证扩展PrimeFaces CSV

發(fā)布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 primefaces_使用Bean验证扩展PrimeFaces CSV 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

primefaces

你們中有些人已經(jīng)知道我和我的合著者Mert?al??kan正在研究PrimeFaces Cookbook的2.版。 Packt Publishing允許我從新章節(jié)“客戶端驗證”的一個食譜中摘錄一小部分摘錄。 這將有助于使讀者知道這本書的內(nèi)容。 在此博客文章中,我想討論使用Bean驗證擴展的PrimeFaces客戶端驗證(CSV)。

Bean Validation是一個驗證模型,可作為Java EE 6平臺的一部分使用,它允許通過約束將字段,方法或類上的批注形式的驗證。 JSF 2.2支持對托管bean以及Spring或CDI bean中的字段(屬性及其getter / setter)的驗證。 只要不使用OmniFaces之類的實用程序,尚不支持在類級別進行驗證。

PrimeFaces的CSV與Bean驗證具有內(nèi)置集成。 注釋定義的約束可以通過CSV框架在客戶端進行驗證。 盡管Bean Validation API定義了一整套標準約束注釋,但可以輕松想到這些標準注釋不足的情況。 對于這些情況,您可以為特定的驗證要求創(chuàng)建自定義約束。 PrimeFaces中的客戶端驗證API與自定義約束無縫協(xié)作。

在本食譜中,我們將開發(fā)一種特殊的自定義約束和驗證器,以驗證卡驗證碼( CVC )。 CVC與銀行卡號一起用作安全功能。 它是一個長度在三到四位數(shù)之間的數(shù)字。 例如,萬事達卡或Visa卡需要三位數(shù),而美國運通卡需要四位數(shù)。 因此,CVC驗證將取決于所選的銀行卡。 用戶可以通過p:selectOneMenu選擇銀行卡,在p:inputText鍵入CVC,然后提交輸入。

怎么做…

我們將從用于CVC字段的自定義注釋開始。

import org.primefaces.validate.bean.ClientConstraint; import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD;@Constraint(validatedBy = CvcConstraintValidator.class) @ClientConstraint(resolvedBy = CvcClientConstraint.class) @Target({FIELD, METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface ValidCVC {String message() default "{invalid.cvc.message}";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};// identifier of the select menu with cardsString forCardMenu() default ""; }

@Constraint是來自Bean Validation API的常規(guī)注釋,而@ClientConstraint是來自PrimeFaces CSV框架的注釋,它有助于解析元數(shù)據(jù)。 開發(fā)的注釋定義消息密鑰invalid.cvc.message并且具有Custom屬性forCardMenu 。 此屬性的值是任何有關(guān)PrimeFaces Selectors (PFS)搜索表達式,用于引用銀行卡的選擇菜單。 這是必需的,因為有效的CVC值取決于所選的卡。

CvcConstraintValidator的目標是驗證輸入長度。

public class CvcConstraintValidator implements ConstraintValidator<ValidCVC, Integer> {@Overridepublic void initialize(ValidCVC validCVC) {}@Overridepublic boolean isValid(Integer cvc, ConstraintValidatorContext context) {if (cvc == null || cvc < 0) {return false;}int length = (int) (Math.log10(cvc) + 1);return (length >= 3 && length <= 4);} }

CvcClientConstraint的目標是準備元數(shù)據(jù)。

public class CvcClientConstraint implements ClientValidationConstraint {private static final String CARDMENU_METADATA = "data-forcardmenu";@Overridepublic Map<String, Object> getMetadata(ConstraintDescriptor constraintDescriptor) {Map<String, Object> metadata = new HashMap<String, Object>();Map attrs = constraintDescriptor.getAttributes();String forCardMenu = (String) attrs.get("forCardMenu");if (StringUtils.isNotBlank(forCardMenu)) {metadata.put(CARDMENU_METADATA, forCardMenu);}return metadata;}@Overridepublic String getValidatorId() {return ValidCVC.class.getSimpleName();} }

讓我們轉(zhuǎn)到客戶端實現(xiàn)。 首先,我們必須創(chuàng)建一個JavaScript文件,說validators.js ,并命名空間中的注冊有自己的驗證PrimeFaces.validator名為ValidCVC 。 此名稱是由getValidatorId()方法返回的唯一ID(請參見類CvcClientConstraint )。 要實現(xiàn)的功能稱為validate() 。 它有兩個參數(shù):元素本身和要驗證的當前輸入值。

PrimeFaces.validator['ValidCVC'] = {MESSAGE_ID: 'invalid.cvc',validate: function (element, value) {// find out selected menu valuevar forCardMenu = element.data('forcardmenu');var selOption = forCardMenu ?PrimeFaces.expressions.SearchExpressionFacade.resolveComponentsAsSelector(forCardMenu).find("select").val() : null;var valid = false;if (selOption && selOption === 'MCD') {// MasterCardvalid = value > 0 && value.toString().length == 3;} else if (selOption && selOption === 'AMEX') {// American Expressvalid = value > 0 && value.toString().length == 4;}if (!valid) {throw PrimeFaces.util.ValidationContext.getMessage(this.MESSAGE_ID);}} };

其次,我們必須為本地化消息創(chuàng)建一個JavaScript文件,例如lang_en.js 。

PrimeFaces.locales['en'] = {messages : PrimeFaces.locales['en_US'].messages };$.extend(PrimeFaces.locales['en'].messages, {...'invalid.cvc':'Card Validation Code is invalid' });

Bean具有兩個必需屬性,并帶有@NotNull注釋。 另外,屬性cvc帶有我們的自定義注釋@ValidCVC 。 forCardMenu的屬性forCardMenu指向p:selectOneMenu的樣式類,該樣式類列出了可用的銀行卡。

@Named @ViewScoped public class ExtendCsvBean implements Serializable {@NotNullprivate String card;@NotNull@ValidCVC(forCardMenu = "@(.card)")private Integer cvc;public void save() {RequestContext.getCurrentInstance().execute("alert('Saved!')");}// getters / setters... }

在XHTML片段中,我們有一個帶有兩個銀行卡的選擇菜單和一個CVC輸入字段。 p:commandButton驗證字段并在回發(fā)時執(zhí)行方法save() 。

<h:panelGrid id="pgrid" columns="3" cellpadding="3" style="margin-bottom:10px;"><p:outputLabel for="card" value="Card"/><p:selectOneMenu id="card" styleClass="card"value="#{extendCsvBean.card}"><f:selectItem itemLabel="Please select a card"itemValue="#{null}"/><f:selectItem itemLabel="MasterCard"itemValue="MCD"/><f:selectItem itemLabel="American Express"itemValue="AMEX"/></p:selectOneMenu><p:message for="card"/><p:outputLabel for="cvc" value="CVC"/><p:inputText id="cvc" value="#{extendCsvBean.cvc}"/><p:message for="cvc"/> </h:panelGrid><p:commandButton validateClient="true" value="Save"process="@this pgrid" update="pgrid" action="#{extendCsvBean.save}"/>

注意:如您所見, p:selectOneMenu和p:inputText指定必需的屬性。 我們可以實現(xiàn)的轉(zhuǎn)變@NotNull注釋與價值所需要的屬性, true ,如果我們設(shè)置的參數(shù)范圍內(nèi)primefaces.TRANSFORM_METADATA至true 。

在最后一步中,所有必需JavaScript文件都必須包含在頁面上。

<h:outputScript library="js" name="chapter10/lang_en.js"/> <h:outputScript library="js" name="chapter10/validators.js"/>

下兩張圖片顯示驗證失敗時會發(fā)生什么

如果一切正常,則出現(xiàn)一個帶有已保存文本的警告框。 向用戶顯示。

這個怎么運作…

消息密鑰invalid.cvc.message和文本應(yīng)放在名為ValidationMessages資源包中,例如ValidationMessages_en.properties 。 ValidationMessages是Bean驗證規(guī)范中指定的標準名稱。 屬性文件應(yīng)位于應(yīng)用程序類路徑中,并包含以下條目: invalid.cvc.message=Card Validation Code is invalid 。 此配置對于服務(wù)器端驗證很重要。

類CvcClientConstraint的方法getMetadata()提供具有名稱,值對的映射。 元數(shù)據(jù)在呈現(xiàn)HTML中公開。 可以通過element.data(name)在客戶端訪問這些值,其中element是基礎(chǔ)本機HTML元素的jQuery對象。 具有元數(shù)據(jù)的CVC字段呈現(xiàn)為

<input type="text" data-forcardmenu="@(.card)"data-p-con="javax.faces.Integer" data-p-required="true"...>

最有趣的部分是客戶端驗證器的實現(xiàn)。 要驗證的值已經(jīng)是數(shù)字,因為首先它由PrimeFaces的內(nèi)置客戶端轉(zhuǎn)換器針對數(shù)據(jù)類型java.lang.Integer轉(zhuǎn)換。 我們只需要檢查該值是否為正且具有有效長度。 有效長度取決于菜單p:selectOneMenu中所選的卡片,PrimeFaces JavaScript API可以將其作為PrimeFaces.expressions.SearchExpressionFacade.resolveComponentsAsSelector(selector)進行訪問,其中選擇器是任何PrimeFaces選擇器,在本例中為@(.card) 。 如果驗證失敗,則通過引發(fā)throw PrimeFaces.util.ValidationContext.getMessage(text, parameter)引發(fā)異常。

通過在p:commandButton上設(shè)置validateClient=”true”來觸發(fā)客戶端驗證。

翻譯自: https://www.javacodegeeks.com/2015/01/extending-primefaces-csv-with-bean-validation.html

primefaces

總結(jié)

以上是生活随笔為你收集整理的primefaces_使用Bean验证扩展PrimeFaces CSV的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 香蕉色视频 | 国精产品一区一区三区免费视频 | 男女黄色录像 | 黄色理论片 | 奇米影视播放器 | 在线观看视频日韩 | 性猛交ⅹxxx富婆视频 | 黄色一级片免费播放 | 欧美精品乱码视频一二专区 | 最新高清无码专区 | 欧美成人国产精品高潮 | 茄子视频懂你更多在线观看 | 在线观看免费视频国产 | 精品人妻无码一区二区性色 | 性a视频 | 国产人成一区二区三区影院 | 日韩一区二区三区不卡视频 | 日韩中文字幕不卡 | 欧美日韩一区二区三区视频 | 超清纯大学生白嫩啪啪 | 国产人成无码视频在线观看 | 浓精h攵女乱爱av | 久久久综合 | 日韩精品免费在线 | 国产真实夫妇交换视频 | 特黄一区二区三区 | 欧美影院一区二区三区 | 一区二区三区四区免费视频 | 黑人操亚洲女人 | jlzzjlzz亚洲女人18 | 嫩嫩av| 国产字幕在线观看 | 夜夜嗨av一区二区三区免费区 | 日韩超碰| 91九色网| 国产免费成人 | 黑丝美女av| 91视频在线观看免费 | 黄色片在线免费观看视频 | 国产全肉乱妇杂乱视频 | 夜夜嗷| 亚洲激情午夜 | 国产激情第一页 | 日韩午夜三级 | 午夜偷拍视频 | 久久久999视频 | 久久精品a | 日韩精品在线观看视频 | 成人精品在线视频 | 少妇精品一区 | 亚洲aaa视频| 国产精品无码久久久久久 | 男男在线观看 | 性欧美bbw | 在线观看一区二区视频 | 夜色成人网| 久久精品视频一区二区 | 男男肉耽高h彩漫 | 中国少妇初尝黑人巨大 | 久久久久亚洲av片无码下载蜜桃 | 东北老女人av | 亚洲国产毛片aaaaa无费看 | 欧美 日韩 国产 成人 在线 91 | 色桃网| 色女孩综合| 国产成人精品一区二区三区四区 | 日韩精品一区二区三区免费视频 | 宿舍女女闺蜜调教羞辱 | 成人免费在线视频网站 | 国产精品久久久免费视频 | 国产精品成人一区二区三区 | 久久久精彩视频 | 日本一二三区在线视频 | 亚洲国产成人在线视频 | 狠狠操狠狠摸 | 欧美激情视频一区二区 | 精品国精品国产 | 99久久99久久久精品棕色圆 | 国产精品乱码久久久 | 欧美在线观看视频 | 日在线视频 | 天天看天天爽 | 国产精品久久久久久69 | 在哪里可以看黄色片 | 亚洲一区二区自拍 | 国产精品福利网站 | 超碰日韩| 国产无码精品视频 | 美国美女群体交乱 | av黄色天堂 | 成人在线观看一区二区 | 成人免费xxxxx在线视频 | 911美女片黄在线观看游戏 | 自拍视频一区 | 国产在线观看精品 | 中国色老太hd | 色欲AV无码精品一区二区久久 | 日韩草比 | 朝桐光在线视频 |