我在表单中使用 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>
第一次通过按打开搜索 按钮打开对话框时,面板会按原样折叠。但是,当它随后被切换为打开并按下搜索按钮并执行发布对话框部分时,当对话框稍后再次打开时,opend 状态仍然存在。所以看起来最后的折叠状态保存在组件树中。即使是以下内容也不会改变该行为:
<p:panel header="..." toggleable="true" collapsed="#{searchBean.panelCollapsed}>
搜索 bean :
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 中应该是相同的。
最佳答案
我在使用'时遇到了同样的问题 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>
关于jsf - p :panel and p:fieldset issue with collapsed state when using ajax/update,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19543687/