2013-10-23 55 views
0

我在表單內使用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中,這個問題應該是相同的。

+0

不是一個真正的答案,但這裏所描述的解決方法: http://forum.primefaces.org/viewtopic.php? f = 3&t = 30862#p99198 IMO使代碼更難讀,但它幫助我實現目標。 所以我的問題仍然是:上述行爲是一個錯誤或功能? – brianH

+0

我在PF 4中也看到了這一點。出於某種原因,Collapsed屬性沒有使用bean值進行更新。我在那裏放了一些日誌消息來驗證。它也是間歇性的。有時它有效;有時它不會。您擁有的解決方法具有相同的問題。 toggle()被調用,但它有時似乎沒有更新組件。但是,如果我在控制檯中執行此操作,它就會起作用。我把它放在文件載入處理程序中以確保它。 – man910

回答

0

我在使用' p:layout fullpage =「true」時遇到了同樣的問題,所有p:layoutUnit都無法在p:layout標記中摺疊。最後我發現原因是因爲p:layout標籤被h:form標籤包裝。倒塌功能工作正常後,我搬到H:形式爲p:面板像下面

<p:panel collapsed="true"> 
    <h:form> 
    ... 
    </h:form> 
</p:panel>