web-dev-qa-db-ja.com

FaceletsのELブール式で&&を使用する方法は?

FaceletsでEL式を実行する方法を理解するのに少し苦労しています。だから基本的に私は持っています:

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

しかし、私は取得し続けます:

エラートレース[行:69]エンティティ名は、エンティティ参照の「&」の直後になければなりません。

81
Landister

Faceletsは、XMLベースのビューテクノロジーです。 &は、&amp;文字で終わる;などのエンティティの開始を表すXMLの 特殊文字 です。あなたはそれをエスケープする必要がありますが、これはいです:

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

または、代わりにandキーワードを使用します。これは、読みやすさと保守性の観点から推奨されます。

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

こちらもご覧ください:


具体的な問題とは無関係、ブール値とブール値の比較は、式がブール値の結果をすでに期待している場合にはほとんど意味がありません。私は== trueを取り除きます:

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

BalusCの答えに加えて、次のJava RegExpを使用して&&andに置き換えます。

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

EL表現で2つ以上のリテラルを使用している場合に、この正規表現の置換を複数回実行して、すべての出現箇所を見つけました。 EL式の構文が異なる場合、先頭の#を$に置き換えることに注意してください。

6
Florian Sager