[英]PrimeFaces Panel collapses on update
我不知道这是否可能只使用primefaces和JSF,但我有一个面板,它在View Entry上折叠。 我可以打开面板,其中有一个复选框,可以触发Panel的更新。
问题是当面板由Ajax更新时,Panel再次崩溃。 但我想保留小组目前的公开状态。 它不应该在更新时关闭。 这可能吗?
我使用PF 3.2和JSF2.1
<p:fieldset style="width:200px;height:300px;overflow:auto;">
<h:outputLabel value="Available Applications"
style="font-weight: bold;font-size: 14px;" />
<br />
<br />
<h:panelGroup>
<ui:repeat var="category"
value="#{epsEditController.subscriptionCategoryVOs}">
<p:panel header="#{category.applicationCategory.name}"
id="panell" toggleable="true" closable="false" toggleSpeed="500"
collapsed="true"
widgetVar="panel_#{category.applicationCategory.name}">
<h:panelGrid columns="2" border="0">
<h:outputLabel value="Select all"
style="font-weight: bold;float:left;" />
<p:selectBooleanCheckbox value="#{category.allSelected}">
<p:ajax event="change"
listener="#{epsEditController.selectionChanged(category)}"
update="panell" />
</p:selectBooleanCheckbox>
</h:panelGrid>
<ui:repeat var="subcat"
value="#{category.applicationSubcategoryVOs}">
<p:selectBooleanCheckbox value="#{subcat.selected}"
title="#{subcat.applicationSubcategory.name}"
itemLabel="#{subcat.applicationSubcategory.name}" />
</ui:repeat>
</p:panel>
</ui:repeat>
</h:panelGroup>
</p:fieldset>
每次更新后面板折叠的原因是在面板上使用静态collapsed="true"
。 这可以通过两种方式之一来修复
collapsed
属性的值 通过将表单放在面板中并仅更新该表单,您可以有效地更新内容而不是面板。 这样可以确保只刷新表单并保持面板状态不变。
<p:panel header="#{category.applicationCategory.name}" id="panell"
toggleable="true" closable="false" toggleSpeed="500"
collapsed="true"
widgetVar="panel_#{category.applicationCategory.name}">
<h:form id="epsAppForm">
<h:panelGrid columns="2" border="0">
<h:outputLabel value="Select all"
style="font-weight: bold;float:left;" />
<p:selectBooleanCheckbox value="#{category.allSelected}">
<p:ajax event="change"
listener="#{epsEditController.selectionChanged(category)}"
update="@form" />
</p:selectBooleanCheckbox>
</h:panelGrid>
........
</h:form>
</p:panel>
您可以将EL放在collapsed
属性中,而不是固定的collapsed="true"
。 就像是
collapsed="#{myBean.toggleStates[category.applicationCategory]}"
然后,您可以通过ajax调用跟踪pannel的状态
<p:ajax event="toggle" listener="#{myBean.toggleState(category.applicationCategory)" />
...'myBean'代码:
Map<ApplicationCategory, boolean> toggleStates = new HashMap<>();
... prepopulate toggleStates on @init or something
public void toggleState(ApplicationCategory myCategory) {
toggleStates.put(myCategory, !(toggleStates.get(myCategory));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.