我在表单中使用 p:dialog 来执行搜索。该对话框有一个嵌套的 p:panel toggable ,打开对话框时必须折叠。
<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>
首次通过按打开搜索按钮打开对话框,面板将按原样折叠。但是当它打开然后按下 do search 按钮并执行发布对话框部分时,稍后再次打开对话框时,opend状态仍然存在。因此,似乎最后一个折叠状态保存在组件树中。即使以下情况也不会改变这种行为:
<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中读取崩溃状态。但事实并非如此! getter isPanelCollapsed()
甚至没有被调用!
这种行为是否有充分的理由,或者这是 p:panel 和 p:fieldset 中的错误?
使用PF 3.4.1但由于我在changeLogs中找不到一个条目,这个问题在实际的PF版本4.0.1中应该是相同的。
答案 0 :(得分:0)
我在使用时遇到了同样的问题' p:layout fullpage =“true”,所有p:layoutUnit都无法在p:layout标签中折叠。最后我发现原因是因为p:layout标签由h:form标签包装。在将h:form移动到p:panel之后,崩溃函数正常工作,如下面的
<p:panel collapsed="true">
<h:form>
...
</h:form>
</p:panel>