web-dev-qa-db-fra.com

Comment utiliser && dans les expressions booléennes EL dans Facelets?

J'ai un peu de mal à comprendre comment faire et comment utiliser les expressions EL dans Facelets. Donc, fondamentalement, j'ai:

<h:outputText id="Prompt"
    value="Fobar" 
    rendered="#{beanA.Prompt == true && beanB.currentBase !=null}" />

Mais je continue à obtenir:

Error Traced [ligne: 69] Le nom de l'entité doit suivre immédiatement le '&' dans la référence de l'entité.

81
Landister

Facelets est une technologie d'affichage basée sur XML. Le & est un caractère spécial en XML représentant le début d’une entité comme &amp; qui se termine par le ; personnage. Vous devez soit y échapper, ce qui est moche:

rendered="#{beanA.Prompt == true &amp;&amp; beanB.currentBase != null}"

ou d'utiliser le mot-clé and à la place, ce qui est préférable pour la lisibilité et la maintenabilité:

rendered="#{beanA.Prompt == true and beanB.currentBase != null}"

Voir également:


Sans lien avec le problème concret, comparer des booléens à des booléens n'a guère de sens lorsque l'expression attend déjà un résultat booléen. Je me débarrasserais de == true:

rendered="#{beanA.Prompt and beanB.currentBase != null}"
156
BalusC

En plus de la réponse de BalusC, utilisez ce qui suit Java RegExp pour remplacer && avec and:

Search:  (#\{[^\}]*)(&&)([^\}]*\})
Replace: $1and$3

Vous avez exécuté ce remplacement d'expressions régulières à plusieurs reprises pour rechercher toutes les occurrences dans le cas où vous utiliseriez plus de 2 littéraux dans vos expressions EL. N'oubliez pas de remplacer le # par le signe $ si la syntaxe de votre expression EL diffère.

6
Florian Sager