web-dev-qa-db-de.com

Wie verwende ich && in EL-Booleschen Ausdrücken in Facelets?

Ich habe ein wenig Probleme damit, herauszufinden, wie man EL-Ausdrücke in Facelets verwendet. Also im Grunde habe ich:

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

Aber ich bekomme immer:

Error Traced [Zeile: 69] Der Entitätsname muss unmittelbar nach dem '&' in der Entitätsreferenz stehen.

81
Landister

Facelets ist eine XML-basierte Ansichtstechnologie. & Ist ein Sonderzeichen in XML, das den Anfang einer Entität wie &amp; Darstellt, die mit dem Zeichen ; Endet. Sie müssten entweder entkommen, was hässlich ist:

rendered="#{beanA.Prompt == true &amp;&amp; beanB.currentBase != null}"

oder verwenden Sie stattdessen das Schlüsselwort and, das aus Gründen der Lesbarkeit und Wartbarkeit bevorzugt wird:

rendered="#{beanA.Prompt == true and beanB.currentBase != null}"

Siehe auch:


Unrelated Für das konkrete Problem ist der Vergleich von Booleschen Werten mit Booleschen Werten wenig sinnvoll, wenn der Ausdruck bereits ein boolesches Ergebnis erwartet. Ich würde == true Loswerden:

rendered="#{beanA.Prompt and beanB.currentBase != null}"
156
BalusC

Verwenden Sie zusätzlich zur Antwort von BalusC die folgenden Zeichen Java RegExp, um && Durch and zu ersetzen:

Search:  (#\{[^\}]*)(&&)([^\}]*\})
Replace: $1and$3

Sie haben diesen Austausch regulärer Ausdrücke mehrmals ausgeführt, um alle Vorkommen zu ermitteln, wenn Sie in Ihren EL-Ausdrücken> 2 Literale verwenden. Denken Sie daran, das führende # durch $ zu ersetzen, wenn sich Ihre EL-Ausdruckssyntax unterscheidet.

6
Florian Sager