如何在Facelets中的EL布尔expression式中使用&&?
我在找出Facelets中的ELexpression式有点麻烦。 所以基本上我有:
<h:outputText id="Prompt" value="Fobar" rendered="#{beanA.prompt == true && beanB.currentBase !=null}" />
但我不断收到:
错误追踪[line:69]实体名称必须紧跟在实体引用中的“&”之后。
Facelets是基于XML的视图技术。 &
是XML中的一个特殊字符 ,表示象&
以…结尾;
字符。 你需要逃避它,这是丑陋的:
rendered="#{beanA.prompt == true && 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前面的#。