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


83

FaceletsのEL式の実行方法と操作方法を理解するのに少し問題があります。だから基本的に私は持っています:

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

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

エラートレース[行:69]エンティティ名は、エンティティ参照の「&」の直後に続く必要があります。

回答:


162

Faceletsは、XMLベースのビューテクノロジーです。&ある特殊文字のような実体の開始表すXML内&amp;で終了する;文字を。あなたはそれを逃れる必要があるでしょう、それは醜いです:

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}"

2
JSF実装は、このケースを実際に認識し、より良い診断を提供する必要があります。これは単純な問題ですが、初心者にとっては非常に混乱します。
マイクブラウン2011

6

BalusCの答えに加えて、交換するには、次のJava正規表現を使用し&&and

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.