13

I'm trying to use a conditional expression in an el expression used in jsf, but it does not work.

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

but it does not work, the compiler says:

Error Traced[line: 118] The entity name must immediately follow the '&' in the entity reference.

Do you have any suggestions? Thank you!

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
user1820620
  • 672
  • 2
  • 13
  • 27

2 Answers2

30

You seem to be using Facelets (which is perfectly fine). It's however a XML based view technology. Everything which you write in Facelets has to be syntactically valid XML. The & is in XML a special character denoting the start of an entity like &amp;, &lt;, &gt;, &#160;, etc.

If you would like to represent the & as-is in XML, then you'd have to replace it by &amp;.

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

However, that's not pretty readable, you would rather like to use the alternative EL operator and for this (see also operators in EL for an overview of all available operators in EL):

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

All with all, this is in turn pretty clumsy as there's a simpler empty keyword for the purpose of testing both nullness and emptiness. This can in your particular case be used as:

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

or

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

or

<h:outputText value="#{empty sel.description ? 'Empty description' : sel.description} - "/>
BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
  • 1
    Wow, great explanation. && worked for me, but I decided to go with 'and' instead, for readability. Thanks for the tip. – Dan Torrey Sep 23 '14 at 17:23
5

Use and instead of &&. You simply have XML syntax error.

DRCB
  • 2,111
  • 13
  • 21