13

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

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

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

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

你有什么建议吗?谢谢!

4

2 回答 2

30

您似乎正在使用 Facelets(这非常好)。然而,它是一种基于 XML 的视图技术。您在 Facelets 中编写的所有内容都必须是语法上有效的 XML。&是 XML 中的一个特殊字符,表示像, , ,等实体的开始。&amp;&lt;&gt;&#160;

如果您想&用 XML 表示原样,则必须将其替换为&amp;.

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

但是,这不太易读,您宁愿为此使用替代 EL 运算符and(另请参阅EL 中的运算符以了解 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} - "/>
于 2012-11-13T11:35:53.350 回答
5

使用and而不是&&. 您只是有 XML 语法错误。

于 2012-11-13T11:28:26.900 回答