Я работаю с 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.
Любые идеи, как решить эту проблему? Спасибо!