h: selectOneMenu с опцией «Выберите» отображает предыдущий выбор при ошибке проверки

Я использую Spring Webflow 2.4.0.M1 с Mojara JSF 2.1.21.

У меня есть очень простой h: selectOneMenu, например:

<h:selectOneMenu id="title" value="#{person.title}" required="true" requiredMessage="Required title">
        <f:selectItem noSelectionOption="true" itemLabel="Please Select" itemValue="" />
        <f:selectItem itemLabel="Mr" itemValue="MR" />
        <f:selectItem itemLabel="Mrs" itemValue="MRS" />
    </h:selectOneMenu>
    <p:message for="title"/>

После отправки формы со значением, оставленным на «Пожалуйста, выберите», я получаю необходимое сообщение. Если затем я выберу вариант «Г-н», а затем отправлю снова, но с другими полями на странице с ошибками, тогда страница будет перезагружена, и требуемое сообщение для заголовка исчезнет, ​​и г-н выбран, как и ожидалось. Если я затем изменю его обратно на «Пожалуйста, выберите» и снова отправлю, я снова получу требуемое сообщение, но выбранный вариант снова станет «мистером» вместо «Пожалуйста, выберите». EL #{person.title} привязывается к строке, которая по умолчанию является пустой строкой. Пока это кажется проблемой только для selectOneMenu, так как выполнение того же самого в h: inputText работает правильно.

Любые идеи? Также пробовали использовать webflow 2.3.2.RELEASE, и возникла та же проблема.

Похоже, это та же проблема, что и здесь: JAVASERVERFACES-932, что касается 4 года, и имеет фиксированное разрешение. Это точно не исправлено. Я попытаюсь расширить MenuRenderer и переопределить метод renderOption с помощью предложения, упомянутого в конце выпуска Jira.


person annihilate    schedule 10.06.2013    source источник


Ответы (1)


Я могу подтвердить, что расширение MenuRenderer и переопределение метода renderOption с помощью предложения, упомянутого в конце проблемы с Jira, решает проблему.

Не забудьте добавить пропатченный рендерер в Faces-config.xml.

<render-kit>
    <renderer>  
        <component-family>javax.faces.SelectOne</component-family>
        <renderer-type>javax.faces.Menu</renderer-type>
        <renderer-class>your.package.PatchedMenuRenderer</renderer-class>
    </renderer>
</render-kit>
person annihilate    schedule 27.07.2013