繁体   English   中英

PrimeFaces面板在更新时崩溃

[英]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" 这可以通过两种方式之一来修复

  • 只是更新面板的内容而不是面板
  • 通过ajax跟踪面板的折叠状态,并将该状态用作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而不是固定值

您可以将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM