¿Cómo usar && en expresiones booleanas EL en Facelets?

83

Estoy teniendo un pequeño problema para averiguar cómo hacer y está en expresiones EL en Facelets. Así que básicamente tengo:

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

Pero sigo recibiendo:

Error trazado [línea: 69] El nombre de la entidad debe seguir inmediatamente al '&' en la referencia de la entidad.

Landister
fuente

Respuestas:

162

Facelets es una tecnología de visualización basada en XML. El &es un carácter especial en XML que representa el comienzo de una entidad como la &amp;que termina con el ;carácter. Necesitarías escapar de él, lo cual es feo:

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

o para usar la andpalabra clave en su lugar, que se prefiere en cuanto a legibilidad y mantenibilidad:

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

Ver también:


Sin relación con el problema concreto, comparar valores booleanos con valores booleanos tiene poco sentido cuando la expresión ya espera un resultado booleano. Me desharía de == true:

rendered="#{beanA.prompt and beanB.currentBase != null}"
BalusC
fuente
2
La implementación de JSF realmente debería reconocer este caso y brindar un mejor diagnóstico. Es un problema simple, pero muy confuso para los principiantes.
Mike Braun
6

Además de la respuesta de BalusC, use la siguiente expresión regular de Java para reemplazar &&con and:

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

Ha ejecutado este reemplazo de expresión regular varias veces para encontrar todas las ocurrencias en caso de que esté usando> 2 literales en sus expresiones EL. Piense en reemplazar el # inicial por $ si su sintaxis de expresión EL es diferente.

Florian Sager
fuente