[英]Primefaces p:selectOneMenu or p:selectBooleanCheckbox not firing change-event depending on if I use h:form
我正在使用Primefaces 5.3。
首先,根據這篇文章,我實現了根據ap:selectBooleanCheckbox的值更改ap:selectOneMenu可見性的功能:
到目前為止,如果我使用h:form,則此方法有效。
接下來,我想更新p:selectOneMenu中選擇的bean中的值。 這是我的問題開始的地方:即使我使用p:ajax顯式調用偵聽器,也不會調用它。 這是我的代碼:
<h:panelGrid>
<p:selectOneMenu value="#{schedulerCDIBean.selectedParentTask}" var="parentTask" id="taskDependence" disabled="#{task.dependsOn != 'true'}">
<p:ajax event="change" listener="#{schedulerCDIBean.taskToAddListener}"/>
<f:selectItems id="taskDependenceItems" value="#{schedulerCDIBean.taskWebDataObjectList}" var="item" itemLabel="#{item.taskName}"
itemValue="#{item}" />
<p:column>
<h:outputText value="#{parentTask}"/>
</p:column>
</p:selectOneMenu>
</h:panelGrid>
這是我啟用/禁用selectOneMenu的方法:
<p:selectBooleanCheckbox id="dependsOnTask" value="#{task.dependsOn}" itemLabel="Depends On">
<p:ajax update="taskDependence" process="@this"/>
</p:selectBooleanCheckbox>
所有這些都存在於p:accordionPanel的ap:tab中,其中“任務”是我的DataObject-List的變量。
如@BalusC在這篇文章中所提到的: 未調用commandLink / commandButton / ajax支持bean操作/偵聽器方法 (可能的原因:2),
“您不能相互嵌套多個UIForm組件。”
因此,如果我刪除h:form指令,則對Bean中的偵聽器的調用有效。 但是現在,p:selectBooleanCheckbox的值始終設置為“ false”,因此該組件未更新為可見。
我在這里找到了一篇文章,其中OP存在相同的問題,並通過添加h:form指令解決了該問題。
編輯:我的“表單”是ui:composition,並且像這樣<ui:composition template="/templates/pages/mainPage.xhtml">
,其中mainPage.xhtml包含h:head並包含“ header.xhtml”使用ui:include,並且有ah:form。 但是此h:form之前已經關閉,因此問題不在這里。
好吧,我不想再添加h:form,因為它會導致未指定的行為。 但是,如果我的p:selectBooleanCheckbox值設置不正確,那我在做什么錯呢?
謝謝您的幫助!
更新
問題不是h:form,因為它實際上不是嵌套的。 現在,我仍然停留在p:selectOneMenu的監聽器上,因為它們沒有被調用。 我還嘗試在<p:ajax />
上設置partialSubmit="true"
,但到目前為止還沒有找到解決方案。
伙計們,謝謝您的幫助。 在您的幫助下,我解決了問題。
就像其他人遇到類似的問題一樣,這里需要檢查一些事項:
equals()
和hashCode()
。 @irieill的評論中實際上提到了針對我的情況的解決方案:
[..]不提供適當的轉換器不會引發任何異常,但是會遇到錯誤消息。 因此,請嘗試在頁面上添加
<p:growl autoUpdate="true" />
,以查看是否出現任何轉換錯誤。 如果是這樣,請將propper轉換器添加到selectOneMenu
。
我認為,這也是@BalusC在其可能原因列表的第3點說的話。
另請參閱: 如何為<p:pickList>
編寫定制轉換 器,JSF 2.0中的定制轉換器 , PrimeFaces ShowCase:SelectOneMenu
就像@BalusC在這篇文章中提到的那樣: 未調用commandLink / commandButton / ajax支持bean操作/偵聽器方法
還要注意第1點。您必須使用<h:form />
標記將輸入組件括起來。
好吧,我不想再添加h:form,因為它會導致未指定的行為。
據我了解,您正在濫用標簽,或者您不知道如何使用它。 只需將整個頁面(或至少所有輸入組件)封裝在一個<h:form />
標記中,它就可以工作。
您能否用頁面代碼更新您的問題,該頁面代碼還包含放置<h:form />
標記的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.