Ошибка проверки JSF из компонента, который не отображается - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть форма, в которой есть поле, которое должно отображаться как значение только для чтения в режиме редактирования и как раскрывающийся список выбора в режиме создания.

Поле только для чтения (используется в режиме редактирования) отображается в виде простого текста с использованием <h:outputText>.В режиме создания поле отображается <h:selectOneListbox> с обязательным атрибутом "true".

Кажется, что оно работает, как я ожидаю, большую часть времени, но иногда я получаю ошибку проверки, когда в режиме редактирования(поле списка выбора не отображается).

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

<h:outputLabel id="lblBusinessArea" value="Business Area:" />
<h:panelGroup id="baGroup">
    <h:selectOneListbox id="businessAreaList" size="1"
            rendered="#{shiftDetailsController.canEditBusinessArea}" 
            converter="businessAreaConverter"
            value="#{shiftDetailsController.selectedBusinessArea}"
            label="Business Area"
            required="true">
        <f:selectItems id="businessAreaListItems" value="#{shiftDetailsController.businessAreas}" />
        <a4j:support id="businessAreaA4j" event="onchange"
            ajaxSingle="true" reRender="deploymentGroupList, positionPayGroupList, sapPremCodeList" />
    </h:selectOneListbox>
    <h:outputText id="businessAreaRO" 
         rendered="#{!shiftDetailsController.canEditBusinessArea}" 
         value="#{shiftDetailsController.selectedBusinessArea.busAreaDesc}" />
</h:panelGroup>

Ниже приведена вырезка экрана, показывающая поле (в режиме редактирования), отображаемое только для чтения.Была нажата кнопка «Сохранить», и я получил сообщение об ошибке проверки правильности поля.

  1. Значение должно быть в базовом компоненте, поскольку отображаемое значение относится к тому же объекту (shiftDetailsController.selectedBusinessArea).В выходном тексте используется поле описания объекта бизнес-сферы, а в поле выбора используется весь объект, в котором SelectItem содержит описание в метке.

field rendered as read-only with validation message appearing

Любая идеякак это может происходить?Я мог бы установить обязательный атрибут, используя то же логическое значение, которое определяет состояние рендеринга ... так, чтобы оно требовалось только при его рендеринге ... но так как эта проблема временная ... Я не знаю, это действительно поможет.

Я также убедился, что никакие другие компоненты на странице не имеют случайного значения метки «Business Area» (которое используется в сообщении проверки), чтобы ввести меня в заблуждение, в котором компонент действительно имеет нулевое значение;это единственный знак с надписью "Business Area".

1 Ответ

0 голосов
/ 17 декабря 2011

Я выяснил, что происходит с этой проблемой.

До отправки формы и получения ошибки проверки.Я вносил изменение, которое приводило к изменению флага, управляющего видимостью двух компонентов.

rendered="#{shiftDetailsController.canEditBusinessArea}"

Другими словами, то, что я делал в форме, заставляло canEditBusinessArea изменять значения.Но я не повторно отображал группу панелей ("baGroup"), чтобы пользовательский интерфейс отображал обновление.

Таким образом, когда моя форма была отправлена ​​компоненту на этапе проверкибыл замечен как необходимый ... запуск проверки.Как только я добавил «baGroup» в reRender действия, которое переворачивало флаг редактирования бизнес-области, пользовательский интерфейс начал отражать обновление, и отправленная форма имела значение.

...