Frage Wie benutzt man && in EL booleschen Ausdrücken in Facelets?


Ich habe ein wenig Schwierigkeiten herauszufinden, wie es geht und ist auf EL-Ausdrücke in Facelets. Also im Grunde habe ich:

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

Aber ich bekomme immer wieder:

Error Traced [line: 69] Der Entity-Name muss unmittelbar dem '&' folgen   in der Entitätsreferenz.


75
2017-12-18 15:59


Ursprung


Antworten:


Facelets ist eine XML-basierte Ansichtstechnologie. Das & ist ein Sonderzeichen in XML, das den Anfang einer Entität wie darstellt &amp; was mit dem endet ; Charakter. Du müsstest entweder entkommen, was hässlich ist:

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

oder um das zu benutzen and Stichwort statt dessen, was hinsichtlich Lesbarkeit und Wartbarkeit bevorzugt wird:

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

Siehe auch:


Nicht verwandt Zu dem konkreten Problem macht das Vergleichen von Booleschen Werten mit booleschen Werten wenig Sinn, wenn der Ausdruck bereits ein boolesches Ergebnis erwartet. Ich würde loswerden == true:

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

143
2017-12-18 16:03



Verwenden Sie neben der Antwort von BalusC die folgende Java-RegExp zum Ersetzen && mit and:

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

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


4
2018-03-14 16:15