За исключением c:if
или c:choose
, существуют ли лучшие способы реализации условного рендеринга 1 компонента из нескольких компонентов. Что-то вроде случая переключения для страниц JSF?Вариант корпуса коммутатора для страниц JSF
ответ
Канонический подход JSF для этого использует атрибут rendered
. Вот некоторые примеры:
<h:someComponent rendered="#{bean.booleanValue}" />
<h:someComponent rendered="#{bean.intValue gt 10}" />
<h:someComponent rendered="#{bean.objectValue eq null}" />
<h:someComponent rendered="#{bean.stringValue ne 'someValue'}" />
<h:someComponent rendered="#{not empty bean.collectionValue}" />
<h:someComponent rendered="#{not bean.booleanValue and bean.intValue ne 0}" />
<h:someComponent rendered="#{bean.enumValue eq 'ONE' or bean.enumValue eq 'TWO'}" />
Разница с JSTL тегами, что атрибут rendered
оценивается во время просмотра визуализации, в то время как JSTL метки выполняются во время сборки вида. См. Также JSTL in JSF2 Facelets... makes sense?
Итак, если переменные, необходимые для оценки условия, имеют более узкую область действия, чем область обзора (то есть область запроса), тогда вы должны использовать атрибут rendered
. Например, при повторной рендеринге группы компонентов по запросу ajax. Хотя теги JSTL могут работать одинаково хорошо, в этом случае они могут быть оценены «слишком рано» (т. Е. До того, как действие будет вызвано, что, в свою очередь, изменило бы условия), и они также нарушат область обзора. См. Также @ViewScoped
breaks in tag handlers.
Если переменные, необходимые для оценки состояния, имеют более широкий охват, например. общесистемной или прикладной или жестко закодированы в некоторых клиентах шаблонов, тогда теги JSTL более эффективны, так как они будут оцениваться только во время времени просмотра, а не каждый раз во время просмотра рендеринга. Смотрите также How to make a grid of JSF composite component?
Вы можете использовать rendered
атрибут:
<h:commandButton rendered="#{value == 'value1'}"/>
<h:commandButton rendered="#{value == 'value2'}"/>
Это не так ясно, как реальный оператор случае, но в простом JSF.
, можете ли вы уточнить, лучше ли это использовать 'c: if' & how? –
@user Не знаю. Вам не нужно импортировать пространство имен jstl :) –
Обе книги JavaServer Faces от Hans Bergsten и Core JavaServer Faces отмечают, что использование c: if неэффективно, но не так? В любом случае, зачем использовать их, если вы можете добиться того же со стандартными тегами JSF. – Ravi
- 1. Ошибка корпуса коммутатора?
- 2. Как достичь этого корпуса коммутатора?
- 3. Объясните программу корпуса коммутатора?
- 4. Android Intent внутри корпуса коммутатора
- 5. Зацикливание внутри корпуса коммутатора для минимизации кода?
- 6. Условный разрыв внутри корпуса коммутатора
- 7. Реализация языкового коммутатора в JSF
- 8. goto внутри корпуса коммутатора, работающего странно
- 9. Ошибка, возвращающая стоимость из корпуса коммутатора?
- 10. Regex не может соответствовать шаблону корпуса коммутатора
- 11. Как удалить этот тип корпуса коммутатора?
- 12. Вложенная ошибка корпуса коммутатора с неправильным выходом?
- 13. Строка внутри корпуса коммутатора возвращает нуль
- 14. Eclipse: Java Enum автозаполнение корпуса коммутатора
- 15. Укорачивание корпуса коммутатора с помощью интеллектуального алгоритма
- 16. Заполнение данных корпуса коммутатора с помощью json
- 17. Странное поведение корпуса коммутатора с булевым значением
- 18. C++ Тип данных зависит от корпуса коммутатора
- 19. если внутри корпуса коммутатора, чтобы ограничить случаи
- 20. Корпус выключателя внутри петли внутри корпуса коммутатора
- 21. Хранение значения корпуса коммутатора в переменной
- 22. Отказ Netbeans не работает должным образом для корпуса коммутатора php
- 23. Есть ли хорошая альтернативная структура для использования внутреннего корпуса коммутатора?
- 24. Рефакторинг корпуса коммутатора для хэш-карт: дополнительное использование памяти?
- 25. Есть ли лучшая реализация для этой конструкции корпуса коммутатора?
- 26. Использование инструкции if вместо значения по умолчанию для корпуса коммутатора
- 27. Как использовать альтернативу для корпуса коммутатора с объектами?
- 28. Как определить пустое входное значение для корпуса коммутатора?
- 29. Итерация и использование корпуса коммутатора с этой программой
- 30. Wordpress страниц меню вариант
Связанный: http://stackoverflow.com/questions/4870462/conditionally-displaying-html-elements/4870557#4870557 – BalusC
@BalusC: могли бы вы уточнить, если это лучше использовать 'rendered' атрибут, чем при использовании 'c: if'? –
Я думаю, что, поскольку у меня будет несколько атрибутов «rendered» для нескольких компонентов, мне может быть лучше, если вы используете набор 'if''' 'иначе, чтобы, если мое первое условие имеет большую вероятность быть правдой, чем я буду сохраненный с дальнейших проверок условий –