Estoy trabajando con JSF 2.0, JBoss 7.1.1 Final y tengo el siguiente problema con selectOneMenu. Quiero ser capaz de establecer un campo en un bean administrado en verdadero/falso/nulo. Por lo tanto, he creado siguiendo selectOneMenu:h: selectOneMenu con elementos booleanos no funciona con valor nulo
<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>
Ahora, si decido 'Cualquier ..', se le asignará "falso" al campo registrationComplete (que es de Boole). Por lo tanto, null se interpreta como falso. También traté de utilizar valores booleanos en el selectItem (s), es decir:
<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>
Y también convertidor de caras-config registrados de la siguiente manera:
<converter>
<converter-id>booleanConverter</converter-id>
<converter-class>javax.faces.convert.BooleanConverter</converter-class>
</converter>
y trataron de usarlo:
<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>
Pero todos estos intentos dieron como resultado el mismo comportamiento: cuando se seleccionó el valor nulo, se interpretó como falso.
Lo depuré y en el seguimiento de la pila encontré la ubicación donde ocurre. En AstValue.setValue(EvaluationContext, Object) line: 204
que llama
ELSupport.coerceToType(value, targetClass)
parámetro valor es nulo y es targetClass de Boole. Este método coerceToType devuelve falso.
¿Alguna idea de cómo resolver este problema? ¡Gracias!
¿Cuál es la firma del método() setRegistrationComplete? ¿Cuál es el tipo de argumento? Booleano o booleano? – prageeth
@prageeth: OP declaró claramente 'Boolean'. – BalusC
@prageeth es público void setRegistrationComplete (Boolean registrationComplete). Y el registro de campo completo es booleano – lukas