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

use*_*620 11 jsf el ternary-operator logical-operators

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

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

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

跟踪错误[line:118]实体名称必须紧跟实体引用中的"&".

你有什么建议吗?谢谢!

Bal*_*usC 28

你好像在使用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'} - "/>
Run Code Online (Sandbox Code Playgroud)

但是,这不是很可读,你宁愿使用备用EL运算符and(参见EL中的运算符,了解EL中所有可用运算符的概述):

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

总而言之,这又是非常笨拙的,因为有一个更简单的empty关键字,用于测试无效和空虚.在您的特定情况下,这可以用作:

<h:outputText value="#{not empty sel.description ? sel.description : 'Empty description'} - "/>
Run Code Online (Sandbox Code Playgroud)

要么

<h:outputText value="#{!empty sel.description ? sel.description : 'Empty description'} - "/>
Run Code Online (Sandbox Code Playgroud)

要么

<h:outputText value="#{empty sel.description ? 'Empty description' sel.description} - "/>
Run Code Online (Sandbox Code Playgroud)


DRC*_*RCB 5

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