Требуется ли на selectOneMenu только принимать true? - PullRequest
1 голос
/ 12 сентября 2011

У меня есть этот selectOneMenu, который запрашивает что-то, значение по умолчанию пусто, потому что люди должны думать о вопросе и фактически должны его заполнить.

<h:selectOneMenu id="fileSecurity" value="#{flowScope.application.fileSecurity}" required="true" >  
    <f:selectItem itemLabel="" itemValue="" noSelectionOption="true"/>  
    <f:selectItem itemLabel="ja" itemValue="true" />  
    <f:selectItem itemLabel="nee" itemValue="false" />     
</h:selectOneMenu>

Это то, что у меня есть, теперь, когда вы заполняете пустое значение, оно дает: «managementTabs: ApplicationManagementForm: fileSecurity: необходимо заполнить». что правильно.

Когда я нажимаю да или истинное значение, он принимает ответ.

Но когда я нажимаю нет или ложь, это дает: "managementTabs: ApplicationManagementForm: fileSecurity: Ошибка проверки: значение недопустимо"

  • Почему Jsf2.0 принимает в качестве действительного awnser только true, а не false?
  • Есть ли способ обойти это? Или мне нужно написать собственный валидатор?

1 Ответ

4 голосов
/ 12 сентября 2011

Кажется, что переданное значение false каким-то образом конфликтует со значением пустой строки noSelectionOption. Следующие записи для 1-го элемента работают нормально:

<f:selectItem itemLabel="" itemValue="" />  

и

<f:selectItem itemLabel="" noSelectionOption="true" />

и

<f:selectItem itemLabel="" itemValue="#{null}" noSelectionOption="true" />

Я только не понимаю, почему. Это нелогично. Чтобы найти реальный ответ, мне нужно запустить отладчик.


Обновление : я отладил и нашел виновника в SelectUtils#valueIsNoSelectionOption() (Моджарра). Пустая строка noSelectionOption приводится к boolean false вместо Boolean null, и, следовательно, сравнение с переданным значением является действительным, и, следовательно, выбранное значение является недействительным. Это "по замыслу". Вам действительно нужно явно указать itemValue="#{null}".

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