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

时间:2011-12-18 15:59:06

标签: jsf facelets el

我在Facelets中找出如何处理EL表达式时遇到了一些麻烦。 基本上我有:

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

但我一直在接受:

  

跟踪错误[line:69]实体名称必须紧跟'&amp;'   在实体参考中。

2 个答案:

答案 0 :(得分:152)

Facelets是一种基于XML的视图技术。 &是XML中的special character,表示像&amp;这样以;字符结尾的实体的开头。你需要逃避它,这是丑陋的:

rendered="#{beanA.prompt == true &amp;&amp; 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表达式语法不同,请注意将$替换为#。

相关问题