Як використовувати && у логічних виразах EL у Facelets?


83

У мене є невеликі проблеми з тим, як зрозуміти, як це робити і як робити вираз EL у Facelets. Отже, в основному я маю:

<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 повинна справді розпізнати цей випадок і дати кращу діагностику. Це проста проблема, але дуже заплутана для початківців.
Mike Braun

6

На додаток до відповіді BalusC, використовуйте таку Java RegExp, щоб замінити &&на and:

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

Ви виконували цю заміну регулярного виразу кілька разів, щоб знайти всі випадки, якщо ви використовуєте> 2 літерали у своїх виразах EL. Зауважте замінити провідну # на $, якщо синтаксис виразу EL відрізняється.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.