我在表单中使用p:dialog来执行搜索。该对话框有一个嵌套的p:panel,它是可切换的,并且在打开对话框时必须折叠。
<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 搜索按钮并执行发布对话框部分时,当稍后再次打开对话框时,打开状态保持不变。所以看起来最后的折叠状态保存在组件树中。即使以下内容也不会改变这种行为:
<p:panel header="..." toggleable="true" collapsed="#{searchBean.panelCollapsed}>
搜索豆:
private boolean panelCollapsed;
public void initSearch() {
panelCollapsed = true;
}
public boolean isPanelCollapsed() {
return panelCollapsed;
}
public void setPanelCollapsed(boolean panelCollapsed) {
this.panelCollapsed = panelCollapsed;
}
所以你会认为,执行update="search"
会导致从 bean 中读取折叠状态蜂。但事实并非如此!isPanelCollapsed()
甚至没有调用吸气剂!
这种行为是否有充分的理由,或者这是p:panel和p:fieldset中的错误?
使用 PF 3.4.1,但由于我在 changeLogs 中找不到条目,所以这个问题在实际的 PF 版本 4.0.1 中应该是相同的。