Как использовать && в El булевых выражениях в Facelets?


У меня возникли небольшие проблемы с выяснением, как это сделать, и на El выражения в Facelets. Так что в основном у меня есть:

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

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

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

2 78

2 ответа:

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

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

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

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