У меня есть форма с полем, которое необходимо отображать как значение только для чтения в режиме редактирования и как раскрывающийся список выбора в режиме создания.
Поле только для чтения (используемое в режиме редактирования) отображается как обычный текст с использованием <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>
Ниже приведена вырезка экрана, показывающая поле (в режиме редактирования), отображаемое как доступное только для чтения. Была нажата кнопка «Сохранить», и я получаю сообщение об ошибке проверки, что поле является обязательным.
- Значение должно быть в компоненте поддержки, поскольку отображаемое значение относится к тому же объекту (shiftDetailsController.selectedBusinessArea). Выходной текст использует поле описания в объекте бизнес-области, а поле выбора использует весь объект, где SelectItem имеет описание в метке.

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