h:selectOneMenu avec l'opérateur booléen éléments ne fonctionne pas avec la valeur null

Je travaille avec JSF 2.0, JBoss 7.1.1 Final et j'ai le problème suivant avec selectOneMenu. Je veux être en mesure de définir un champ dans un managed bean true/false/null. Ainsi, j'ai créé à la suite d'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>

Maintenant, Si je décide de " Tout..', il va céder à "false" à la registrationComplete champ (qui est un Booléen). Donc null est interprété comme faux. J'ai aussi essayé d'utiliser des valeurs booléennes dans le selectItem(s), c'est:

 <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>

Et j'ai aussi enregistré le convertisseur faces-config comme suit:

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

et a essayé de l'utiliser:

<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>

Mais toutes ces tentatives ont abouti à la même comportement -- si la valeur null est sélectionné, il a été interprété comme faux.

J'ai débogué et dans la trace de la pile, j'ai trouvé l'endroit où il se produit. Dans AstValue.setValue(EvaluationContext, Object) line: 204

il appelle

ELSupport.coerceToType(value, targetClass)

valeur de paramètre est null et targetClass est un Booléen. Cette coerceToType méthode, puis renvoie la valeur false.

Toute idée comment résoudre ce problème? Merci!

Quelle est la signature de la setRegistrationComplete() la méthode? Quel est le type de l'argument? Ou booléen booléen?
OP dit clairement Boolean.
c'est public void setRegistrationComplete(Boolean registrationComplete). Et le champ registrationComplete est un Booléen
Super! Merci! votre solution fonctionne

OriginalL'auteur lukas | 2012-07-25