如何在Facelets中的EL布尔expression式中使用&&?

我在找出Facelets中的ELexpression式有点麻烦。 所以基本上我有:

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

但我不断收到:

错误追踪[line:69]实体名称必须紧跟在实体引用中的“&”之后。

Facelets是基于XML的视图技术。 &是XML中的一个特殊字符 ,表示象&amp; 以…结尾; 字符。 你需要逃避它,这是丑陋的:

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

或者使用and关键字,这是可读性和可维护性的首选。

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

也可以看看:

  • Java EE 6教程 – EL中的运算符

具体问题无关 ,当expression式预期布尔结果时,将布尔值与布尔值比较是没有意义的。 我会摆脱== true

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

除了BalusC的答案之外,还可以使用以下Java RegExpreplace&& with and

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

您已经多次运行这个正则expression式replace,以便在您的ELexpression式中使用> 2个文字的情况下查找所有发生的事件。 如果你的ELexpression式语法不同,请注意用$replace前面的#。