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!
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
Vous devez vous connecter pour publier un commentaire.
Ce qui est typique de l'Apache EL analyseur qui est utilisé par Tomcat et JBoss. Il est connu pour ne pas distinguer entre les primitives et de son emballage objet de représentations lors de contraindre
null
valeurs dans EL. Le wrapper types sont toujours traités comme des primitives. Il fonctionne très bien dans Glassfish, par exemple.Vous pouvez désactiver cette Apache EL analyseur de comportement par adjonction, VM arguments à votre script de démarrage du serveur:
OriginalL'auteur BalusC