2013-06-10 2 views
0

Я использую Spring Webflow 2.4.0.M1 с Mojara JSF 2.1.21.h: selectOneMenu with Пожалуйста, выберите предыдущий выбор при ошибке проверки

У меня есть очень простой час: 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"/> 

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

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

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

ответ

0

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

Не забудьте добавить исправленную визуализатор на ваших лицах-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>