Панель PrimeFaces сворачивается при обновлении

Я не знаю, возможно ли это, используя только простые лица и JSF, но у меня есть панель, которая свернута в View Entry. Я могу открыть панель с флажком, запускающим обновление панели.

Проблема в том, что когда панель обновляется Ajax, панель снова сворачивается. Но я хочу сохранить текущий открытый статус панели. Он не должен закрываться при обновлении. Это возможно?

Я использую 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>

person Coen Damen    schedule 11.04.2012    source источник
comment
У вас есть collapsed="true" на вашей панели. Попробуйте изменить true для переменной bean, которая будет true в начале, но false после того, как вы выполнили свое действие.   -  person Luiggi Mendoza    schedule 11.04.2012
comment
Это может быть полезно для заголовка ="как обновить метку pselectcheckboxmenu без закрытия компонента"> stackoverflow.com/questions/9964759/   -  person Daniel    schedule 06.02.2017


Ответы (1)


Причина, по которой панель сворачивалась после каждого обновления, связана с использованием статического 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.

<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));
}
person Coen Damen    schedule 30.05.2012
comment
если вы все еще используете StackOverflow, примите этот ответ - person Kukeltje; 06.05.2017