3

我在表单中使用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:panelp:fieldset中的错误?

使用 PF 3.4.1,但由于我在 changeLogs 中找不到条目,​​所以这个问题在实际的 PF 版本 4.0.1 中应该是相同的。

4

1 回答 1

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>
于 2014-02-01T04:14:01.520 回答