Особисто я б застосував варіант №2. Хоча я знаю, що дуже можливо вирішити проблему за допомогою EL та отримати трохи використання в xhtml документах за допомогою функцій або інтерфейсу: парами, справді, здається, не мають можливості переносимості, ремонтопридатності та доказуваності реалізації Java-бобів.
Якщо розробник вільно володіє як EL, так і Java та володіє як xhtml, так і Java-бобами, здається, не має особливого сенсу використовувати EL для проведення будь-якої умовної оцінки розміром> 1.
Просто здається, що занадто багато переваг для реалізації на Java:
- Можливість спертися на компілятор IDE +
- Використовуйте константи або перерахунки (для "собаки" та "гавкіт"), ймовірно, вони також використовуються в коді в іншому місці для порівняння ... якщо значення String змінюється, це справжнє задоволення: потрібно вручну замінювати кожну появу його через кодова база
- Замість того, щоб переходити на відповідну сторінку з відповідними даними, я можу використовувати логіку, використовуючи одиничні тести
Один з головних аргументів, які я чув (за межами Stack) на користь Варіанту 1:
"Це набагато простіше побачити, коли компонент відображається, якщо ви дотримуєтесь цієї логіки у перегляді."
Я виявив, що це може стосуватися програми на початковій стадії життя, де вона легша і менш складна. Однак, якщо застосовувати цю практику в більш масштабних масштабах і в міру того, як дозріває менше застосування, це може викликати щурів гніздо умовних умов і стати кошмаром для підтримки. Ось кілька прикладів, схожих на те, що я бачив у дикій природі:
<h:outputText value="grrr"
render="#{animal.type == 'dog' or animal.type == 'cat' or animal.type == 'horse'
or animal.type == 'pony' or animal.type == 'mule' or animal.type == 'lion'
or animal.type == 'tiger' or (animal.type == 'bird'
and animal.subType == 'macaw') or .... continue this for another line or two}"
/>
Або мій улюблений, використовуючи кілька компонентів із умовами візуалізації, які є виключними один для одного, щоб представити різні значення, які можуть відображатися:
<h:outputText value="grr" render="#{theMonstrosityFromPreviousExample} />
<h:outputText value="cry"
render="#{animal.type == 'human' and animal.subType == 'baby'}" />
<h:outputText value="yo"
render="#{animal.type == 'human' and animal.subType == 'teenager'}" />
<h:outputText value="hello"
render="#{animal.type == 'human' and animal.subType == 'adult'}"/>
Чи може бути відображено до 4 текстів одночасно? На перший погляд ви не можете сказати, необхідна перевірка кожної умови. Як бічну зауваження, я розумію, що цей приклад також є поганим дизайном, оскільки їх можна помістити в ac: вибрати ... але я це бачив і раніше.
Зрештою, ця теоретично все ще є "переглядом" логіки, оскільки вона визначає, що насправді відображається, тому є концептуальний аргумент, який повинен жити в xhtml. Проблема, яку я виявив, полягає в тому, що включення такої логіки у шаблон перегляду може зробити макет набагато складнішим для розуміння в довгостроковій перспективі, і я ще не бачив, що цей метод вирішення проблеми має якусь реальну користь, ніж використання Java реалізація бобів
barking animals
я б викликав цей метод, оскільки він уже існує. Якщо ви використовуєте логіку перегляду, яку ви використовуєте на декількох сайтах, ви можете створити з неї функцію el.