p:panel和p:使用ajax / update时崩溃状态的fieldset问题

时间:2013-10-23 13:55:21

标签: jsf primefaces

我在表单中使用 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中应该是相同的。

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>