我在弄清楚Facelets中EL表达式的处理方法和方法时遇到了一些麻烦。所以基本上我有:
<h:outputText id="Prompt"
value="Fobar"
rendered="#{beanA.prompt == true && beanB.currentBase !=null}" />
但我不断得到:
错误跟踪[行:69]实体名称必须紧随实体引用中的“&”之后。
Answers:
Facelets是一种基于XML的视图技术。的&
是一个特殊的字符在XML表示等的实体的开始&
与所述结束;
字符。您需要逃避它,这很丑陋:
rendered="#{beanA.prompt == true && beanB.currentBase != null}"
或改用and
关键字,从可读性和可维护性方面考虑,首选:
rendered="#{beanA.prompt == true and beanB.currentBase != null}"
与具体问题无关,当表达式已经期望布尔结果时,将布尔值与布尔值进行比较就毫无意义。我会摆脱== true
:
rendered="#{beanA.prompt and beanB.currentBase != null}"
除了BalusC的答案之外,请使用以下Java RegExp替换&&
为and
:
Search: (#\{[^\}]*)(&&)([^\}]*\})
Replace: $1and$3
您多次运行了此正则表达式替换操作,以查找所有情况,以防您在EL表达式中使用> 2字面量。如果您的EL表达式语法不同,请注意用$替换前导#。