Лично я бы использовал вариант № 2. Несмотря на то, что я знаю, что решить проблему, используя EL, можно, и получить возможность повторного использования в документах xhtml, используя функции или пользовательский интерфейс: paras, на самом деле кажется, что в реализации Java-бина действительно нет переносимости, удобства сопровождения и тестируемости.
Если разработчик свободно владеет как EL, так и Java и владеет компонентами xhtml и Java, кажется, что не имеет смысла использовать EL для проведения ЛЮБОЙ условной оценки с размером> 1.
Кажется, что реализация на стороне Java имеет слишком много преимуществ:
- Возможность опереться на IDE + компилятор
- Используйте константы или перечисления (для «собака» и «кора»), есть вероятность, что они используются и в других местах кода для сравнений ... если значение String меняется, то очень интересно вручную заменять каждое его вхождение через кодовая база
- Вместо того, чтобы переходить на соответствующую страницу с соответствующими данными, я могу использовать логику с помощью юнит-тестов.
Один из основных аргументов, которые я услышал (вне стека) в пользу варианта 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: select ... но я видел это раньше.
В конце концов, это теоретически логика «просмотра», поскольку она определяет, что на самом деле отображается, так что есть концептуальный аргумент, который должен существовать в xhtml. Проблема, которую я обнаружил, заключается в том, что включение логики, подобной этой, в шаблон представления, может сделать компоновку намного сложнее для понимания в долгосрочной перспективе, и мне еще предстоит увидеть, что этот метод решения проблемы дает реальное преимущество по сравнению с использованием Java. реализация бина.
barking animals
я бы вызвал этот метод, поскольку он уже существует. Если вы используете логику просмотра на нескольких сайтах, вы можете создать из нее функцию el.