在EL中使用&&会导致错误:实体名称必须紧跟在实体引用中的'&'之后

问题描述 投票:11回答:2

我正在尝试在jsf中使用的el表达式中使用条件表达式,但是它不起作用。

<h:outputText value="#{(sel.description !=null) && (sel.description !='') ? sel.description : 'Empty description'} - "/>

但是它不起作用,编译器说:

错误跟踪[行:118]实体名称必须紧跟在实体引用中的“&”。

您有什么建议吗?谢谢!

jsf el ternary-operator logical-operators
2个回答
29
投票

您似乎正在使用Facelets(这很好)。但是,它是一种基于XML的视图技术。您在Facelets中编写的所有内容都必须是语法上有效的XML。 &在XML中是一个特殊字符,表示entity的开头,例如&amp;&lt;&gt;&#160;等。>

如果您想以XML形式表示&,则必须将其替换为&amp;

<h:outputText value="#{(sel.description !=null) &amp;&amp; (sel.description !='') ? sel.description : 'Empty description'} - "/>

但是,这不太可读,您希望为此使用替代的EL运算符and(有关EL中所有可用运算符的概述,另请参见operators in EL

<h:outputText value="#{(sel.description !=null) and (sel.description !='') ? sel.description : 'Empty description'} - "/>

总而言之,这反过来很笨拙,因为有一个更简单的empty关键字可以同时测试无效性和空性。在您的特定情况下,可以用作:

<h:outputText value="#{not empty sel.description ? sel.description : 'Empty description'} - "/>

<h:outputText value="#{!empty sel.description ? sel.description : 'Empty description'} - "/>

<h:outputText value="#{empty sel.description ? 'Empty description' : sel.description} - "/>

5
投票

使用and代替&&。您只是有XML语法错误。

© www.soinside.com 2019 - 2024. All rights reserved.