這裏是我的配置:如何在p:ajax event = change時禁用selectOneMenu上的必需標記?
- PrimeFaces:4.0.4(精英)
- OmniFaces:1.6.3
- JSF:MyFaces的2.0.2
- 服務器:8.5.0.2的WebSphere
一些代碼(我只張貼更多,更清晰的相關部分):
<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
對象列表以及一個「無接觸」選項。如果我想提交表單,這個字段是必需的。
當在列表中選擇一個聯繫人時,將調用updateContact
方法。此方法將生成將顯示在由AJAX調用更新的頁面的area
部分中的數據。
如果我選擇「無聯繫人」選項,由於此字段是必需的,因此會觸發驗證錯誤,因此不會調用updateContact
方法。我想調用該方法,因爲我需要重置一些數據,然後隱藏頁面的area
部分。
我試過使用process="@this"
,immediate="true"
,但它不起作用。使用immediate="true"
,所選的Contact
未傳遞給updateContact
方法。
那麼,選擇空值時繞過此字段驗證的最佳方法是什麼?
您建議的是一個很好的解決方案。不過,我有一句話。我在窗體上的所有必填字段都有一個帶有'for'屬性的關聯'p:outputLabel'。這意味着他們會在旁邊顯示一個小星星(*),向用戶顯示這些字段是必需的。如果我使用您的解決方案,那些星星不再顯示。用戶只有在提交表單後纔會看到它們。 – Nasedo47
查看更新的答案。 – BalusC
太棒了!非常感謝你!正是我需要的。 – Nasedo47