атрибут атрибута не работает должным образом при попытке сделать панели условно - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь показать / скрыть свои панели на основе логического значения, присутствующего на компоненте поддержки, но он не работает должным образом и в пользовательском интерфейсе нет никаких изменений.Это работает нормально в первый раз (отображается только одна из панелей), когда приложение загружается, но затем после того, как обновление не выполнено.

Я знаю, что для выполнения обновления элемент должен уже существовать в dom, поэтому он не обновляет панель, которая не отображается сервером.Но мой вопрос заключается в том, почему другая панель (отображается при загрузке приложения) не скрывается при изменении логического условия.

xhtml файл

    <p:panel>
        <h6 align="center" style="width: 14.7em; background-color: #ACBECE;">Case
            Type</h6>
        <!-- comment type -->
        <p:selectOneListbox id="caseTypeId"
            value="#{treeBean.caseTypeOption}">
            <f:selectItems value="#{treeBean.caseType}" var="X"
                itemLabel="#{X}" itemValue="#{X}" />
                <p:ajax listener="#{treeBean.caseTypeList}" update=":#{p:component('panel2')} :#{p:component('panel3')}"/>
        </p:selectOneListbox>
    </p:panel>

    <p:panel id="panel2" rendered="#{treeBean.editmode}">
        <h6 align="center" style="width: 14.7em; background-color: #ACBECE;">Something
            </h6>

        <p:selectOneListbox id="somethingId"
            value="#{treeBean.somethingOption}">
            <f:selectItems value="#{treeBean.something}" var="X"
                itemLabel="#{X}" itemValue="#{X}" />
        </p:selectOneListbox>
    </p:panel>

    <p:panel id="panel3" rendered="#{!treeBean.editmode}">
        <h6 align="center" style="width: 14.7em; background-color: #ACBECE;">Anything
            </h6>

        <p:selectOneListbox id="anythingId"
            value="#{treeBean.anythingOption}">
            <f:selectItems value="#{treeBean.anything}" var="X"
                itemLabel="#{X}" itemValue="#{X}" />
        </p:selectOneListbox>
    </p:panel>

    </h:panelGrid>

Поддержкаbean (опуская детали)

if (this.caseTypeOption.equalsIgnoreCase("XXX")) {
        this.editmode = false;

    } else {
        this.editmode = true;
    }

где XXX является одним из вариантов в поле выбора caseTypeId.

Как заставить это работать для обеих панелей ??

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Вместо отображаемого атрибута использование атрибута visible помогло мне достичь того, что я хотел.

Поэтому вместо <p:panel id="panel2" rendered="#{treeBean.editmode}">

я использовал: <p:panel id="panel2" visible="#{treeBean.editmode}">

0 голосов
/ 19 ноября 2018

В действии обновления вы должны использовать только имена компонентов, которые вы хотите обновить. В вашем случае вы должны использовать update = ": form: panel2,: form: panel3" . Если эта панель находится в форме, вы должны использовать элемент формы перед именем компонента, в противном случае только имя компонента поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...