h :selectOneMenu с логическими элементами не работает с нулевым значением

Я работаю с JSF 2.0, JBoss 7.1.1 Final, и у меня есть следующая проблема с selectOneMenu. Я хочу иметь возможность установить для поля управляемого компонента значение true/false/null. Таким образом, я создал следующий selectOneMenu:

<h:selectOneMenu value="#{personList.criteria.registrationComplete}" >
    <f:selectItem itemValue="#{null}" itemLabel="Any.." />
    <f:selectItem itemValue="true" itemLabel="Yes"/>
    <f:selectItem itemValue="false" itemLabel="No"/>
</h:selectOneMenu>

Теперь, если я выберу «Любой..», он назначит «false» в поле RegistrationComplete (, которое является логическим ). Итак, null интерпретируется как false . Я также пытался использовать логические значения в selectItem (s ), то есть:

 <h:selectOneMenu value="#{personList.criteria.registrationComplete}" >
    <f:selectItem itemValue="#{null}" itemLabel="Any.." />
    <f:selectItem itemValue="#{true}" itemLabel="Yes"/>
    <f:selectItem itemValue="#{false}" itemLabel="No"/>
</h:selectOneMenu>

А еще я прописал конвертер в Faces -config следующим образом:

<converter>  
    <converter-id>booleanConverter</converter-id>  
    <converter-class>javax.faces.convert.BooleanConverter</converter-class>  
</converter>

и пытался его использовать:

<h:selectOneMenu value="#{personList.criteria.registrationComplete}" >
    <f:selectItem itemValue="#{null}" itemLabel="Any.." />
    <f:selectItem itemValue="true" itemLabel="Yes"/>
    <f:selectItem itemValue="false" itemLabel="No"/>
        <f:converter converterId="booleanConverter"/>
</h:selectOneMenu>

Но все эти попытки приводили к одному и тому же поведению --. когда было выбрано нулевое значение, оно интерпретировалось как ложное.

Я отладил его и в трассировке стека нашел место, где это происходит. ВAstValue.setValue(EvaluationContext, Object) line: 204

он звонит

ELSupport.coerceToType(value, targetClass)

параметр value имеет значение null, а targetClass — логическое значение. Затем этот метод coerceToType возвращает false.

Любые идеи, как решить эту проблему? Спасибо!

8
задан BalusC 26 July 2012 в 16:23
поделиться