我在表單內使用p:對話框來執行搜索。該對話框有一個嵌套的p:面板即可切換,並且在打開對話框時必須是摺疊。p:panel和p:使用ajax/update時崩潰狀態的fieldset問題
<h:form>
...
<p:commandButton value="open search"
actionListener="#{searchBean.initSearch}"
process="@this"
oncomplete="search_dlg.show()"
update="search" />
<p:dialog id="search" widgetVar="search_dlg" visible="false">
...
<p:panel header="..." toggleable="true" collapsed="true">
...
</p:panel>
<p:commandButton value="do search"
actionListener="..."
process="search"
oncomplete="search_dlg.hide()"
update="page" />
</p:dialog>
</h:form>
第一次對話是通過推動開放搜索按鈕運行結束,面板處於摺疊狀態,因爲它應該。但是當它被打開並且搜索按鈕被按下並且執行發佈對話部分時,當稍後再次打開對話時,操作狀態保持不變。所以看起來最後的摺疊狀態保存在組件樹中。即使是以下情況不改變這種行爲:
<p:panel header="..." toggleable="true" collapsed="#{searchBean.panelCollapsed}>
SearchBean:
private boolean panelCollapsed;
public void initSearch() {
panelCollapsed = true;
}
public boolean isPanelCollapsed() {
return panelCollapsed;
}
public void setPanelCollapsed(boolean panelCollapsed) {
this.panelCollapsed = panelCollapsed;
}
所以,你會覺得,在執行update="search"
會導致從bean beeing閱讀崩潰狀態。但事實並非如此!獲取者isPanelCollapsed()
甚至沒有被稱爲!
是否有一個很好的理由的行爲或這是一個錯誤的號碼:面板和號碼:字段集?
使用PF 3.4.1,但由於我無法在changeLog中找到條目,所以在實際PF版本4.0.1中,這個問題應該是相同的。
不是一個真正的答案,但這裏所描述的解決方法: http://forum.primefaces.org/viewtopic.php? f = 3&t = 30862#p99198 IMO使代碼更難讀,但它幫助我實現目標。 所以我的問題仍然是:上述行爲是一個錯誤或功能? – brianH
我在PF 4中也看到了這一點。出於某種原因,Collapsed屬性沒有使用bean值進行更新。我在那裏放了一些日誌消息來驗證。它也是間歇性的。有時它有效;有時它不會。您擁有的解決方法具有相同的問題。 toggle()被調用,但它有時似乎沒有更新組件。但是,如果我在控制檯中執行此操作,它就會起作用。我把它放在文件載入處理程序中以確保它。 – man910