簡體   English   中英

當p:ajax event = change時,如何在selectOneMenu上禁用所需的標記?

[英]How to disable the required tag on a selectOneMenu when p:ajax event=change?

這是我的配置:

  • PrimeFaces:4.0.4(精英)
  • OmniFaces:1.6.3
  • JSF:MyFaces 2.0.2
  • 服務器:WebSphere 8.5.0.2

一些代碼(我只發布了相關部分以便更清晰):

<p:selectOneMenu value="#{viewModel.selectedContact}" required="true" converter="omnifaces.SelectItemsConverter">
    <p:ajax event="change" listener="#{viewModel.updateContact}" update="area"/> 
    <f:selectItem itemValue="#{null}" itemLabel="#{msg.no_contact}" noSelectionOption="true" />
    <f:selectItems value="#{viewModel.contacts}"/> 
</p:selectOneMenu>

所以在這里,我們有一個簡單的p:selectOneMenu ,它包含一個Contact對象列表以及一個“No Contact”選項。 如果我想提交表單,則需要此字段。

在列表中選擇聯系人時,將調用updateContact方法。 此方法將生成將顯示在由AJAX調用更新的頁面的area部分中的數據。

如果我選擇“無聯系”選項,則會觸發驗證錯誤,因為此字段是必需的,因此不會調用updateContact方法。 我希望調用該方法,因為我需要重置一些數據然后隱藏頁面的area部分。

我嘗試過使用process="@this"immediate="true" ,但它不起作用。 如果immediate="true" ,則選定的Contact不會傳遞給updateContact方法。

那么,在選擇空值時繞過該字段驗證的最佳方法是什么?

required屬性檢查是否調用了命令按鈕。 您可以通過請求參數映射中存在按鈕的客戶端ID來檢查。

<p:selectOneMenu ... required="#{not empty param[save.clientId]}" />
...
<p:commandButton binding="#{save}" ... />

(注意:代碼是原樣,你不需要bean屬性)

如果未調用命令按鈕(而是調用ajax更改偵聽器),則required屬性將評估為false並且所有內容都將按照您的意圖進行。


更新 :根據評論,您打算在渲染響應期間始終顯示它們。 所以,只需添加該檢查:

<p:selectOneMenu ... required="#{not empty param[save.clientId] or facesContext.currentPhaseId.ordinal eq 6}" />
...
<p:commandButton binding="#{save}" ... />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM