it-swarm-pt.tech

Como usar o && em expressões booleanas EL em Facelets?

Eu estou tendo um pequeno problema para descobrir como fazer e está em expressões EL em Facelets. Então basicamente eu tenho:

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

Mas continuo recebendo:

Erro rastreado [linha: 69] O nome da entidade deve seguir imediatamente o '&' na referência da entidade.

81
Landister

Facelets é uma tecnologia de visualização baseada em XML. O & é um caractere especial em XML representando o início de uma entidade como &amp; que termina com o caractere ;. Você precisaria ou escapar, o que é feio:

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

ou para usar a palavra-chave and, que é preferível quanto à capacidade de leitura e manutenção:

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

Veja também:


Não relacionado ao problema concreto, comparar booleanos com booleanos faz pouco sentido quando a expressão já espera um resultado booleano. Eu me livraria de == true:

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

Além da resposta do BalusC, use o seguinte Java RegExp para substituir && por and:

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

Você executou essa substituição de expressão regular várias vezes para localizar todas as ocorrências caso esteja usando> 2 literais em suas expressões EL. Lembre-se de substituir o número inicial por $ se a sintaxe da expressão EL for diferente.

6
Florian Sager