簡體   English   中英

Primefaces p:selectOneMenu或p:selectBooleanCheckbox不觸發更改事件,具體取決於我是否使用h:form

[英]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" ,但到目前為止還沒有找到解決方案。

伙計們,謝謝您的幫助。 在您的幫助下,我解決了問題。

就像其他人遇到類似的問題一樣,這里需要檢查一些事項:

  1. 如@irieill的答案中所述,在此處檢查@BalusC的答案。
  2. 檢查是否要在selectOneMenu中顯示對象的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.

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