我在Facelets中找出如何处理EL表达式时遇到了一些麻烦。 基本上我有:
<h:outputText id="Prompt"
value="Fobar"
rendered="#{beanA.prompt == true && beanB.currentBase !=null}" />
但我一直在接受:
跟踪错误[line:69]实体名称必须紧跟'&amp;' 在实体参考中。
答案 0 :(得分:152)
Facelets是一种基于XML的视图技术。 &
是XML中的special character,表示像&
这样以;
字符结尾的实体的开头。你需要逃避它,这是丑陋的:
rendered="#{beanA.prompt == true && beanB.currentBase != null}"
或使用and
关键字,这是可读性和可维护性的首选:
rendered="#{beanA.prompt == true and beanB.currentBase != null}"
无关,当表达式期望已经有布尔结果时,将布尔值与布尔值进行比较是没有意义的。我摆脱了== true
:
rendered="#{beanA.prompt and beanB.currentBase != null}"
答案 1 :(得分:6)
除了BalusC的答案之外,使用以下Java RegExp将&&
替换为and
:
Search: (#\{[^\}]*)(&&)([^\}]*\})
Replace: $1and$3
如果在EL表达式中使用&gt; 2个文字,则多次运行此正则表达式替换以查找所有出现的情况。如果您的EL表达式语法不同,请注意将$替换为#。