Как использовать && в булевых выражениях EL в Facelets? - PullRequest
81 голосов
/ 18 декабря 2011

У меня небольшие проблемы с выяснением того, как это сделать, и с выражениями EL в Facelets.Итак, в основном у меня есть:

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

Но я продолжаю получать:

Ошибка отслежена [строка: 69] Имя объекта должно сразу следовать за '&' в ссылке на объект.

Ответы [ 2 ]

154 голосов
/ 18 декабря 2011

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}"
6 голосов
/ 14 марта 2013

В дополнение к ответу BalusC, используйте следующий Java RegExp для замены && на and:

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

Вы выполняли эту замену регулярного выражения несколько раз, чтобы найти все случаи вВы используете> 2 литералов в своих выражениях EL.Заметьте, чтобы заменить ведущий # на $, если ваш синтаксис выражения EL отличается.

...