Что такое привязка компонентов в JSF? Когда это предпочтительно использовать?
Я прочитал о связывании компонентов с binding
Атрибут в следующих вопросах:
- Связывание компонентов JSF - некоторая путаница
- привязка компонентов против findComponent() - когда и какие использовать?
Я понимаю, что он связывает компонент пользовательского интерфейса за тегом JSF в представлении с UIComponent
собственность в бобе поддержки. Однако меня смущает, что такое использование связывания компонентов и когда мы должны его использовать. Может ли кто-нибудь объяснить это более простым способом и привести несколько практических примеров?
2 ответа
Вы должны использовать его, если вы хотите иметь доступ ко всему UIComponent
а не только его значение. Например, для доступа к некоторым методам, которые нельзя вызвать / связать в представлении. Ответ на первый вопрос, который вы нашли: привязка компонента JSF - некоторая путаница
2-й вопрос, который вы нашли, связывание компонентов vs findComponent() - когда использовать который? Ответы binding
против findComponent()
" не отвечает " binding
против value
" на все, как вы, кажется, думаете. Пожалуйста, не смущайтесь этим. value
очевидно, победит binding
,
В реальном коде привязка компонента к компоненту поддержки часто используется только тогда, когда разработчику необходимо программно манипулировать его дочерними элементами, например: component.getChildren().add(...)
, Однако bean-компонент должен быть ограничен запросом. Более широкая область действия может привести к возникновению неудобств, поскольку экземпляры компонентов в основном создаются для каждого запроса и не должны совместно использоваться несколькими запросами. Область действия представления также может, но это очень неэффективно для памяти, и в версиях Mojarra, более старых, чем 2.1.18, частичное сохранение состояния также должно быть отключено, в противном случае экземпляр объекта области видимости, на который ссылается binding
будет неявно воссоздан при каждом запросе. Смотрите также JSTL в JSF2 Facelets... имеет смысл? для соответствующего ответа.
Также возможно привязать компонент к "представлению". Например
<h:someComponent binding="#{some}">
Это относится к случаю UIComponent
в области Facelet ("область страницы"). Это позволяет вам использовать, например, #{some.clientId}
, #{some.value}
в другом месте на той же странице. Обратите внимание, что здесь не используется бэк-бэк. См. Также связывание компонента JSF без свойства bean-компонента.
Вот некоторые из реальных приборов использования binding
атрибут:
- отключение второго текстового поля после проверки данных через ajax первого текстового поля
- Проверьте, какая форма имеет ошибку
- Проверка ввода текста на основе выбора раскрывающегося списка
- Как разрешить валидацию зависеть от нажатой кнопки?
- Как реализовать нумерацию строк в h: dataTable
- Разделить java.util.Date на два поля h: inputText, представляющие часы и минуты, с помощью f: convertDateTime
Прочитайте этот ответ:
В чем преимущества использования связующего атрибута в JSF?
Тем не менее, многие люди в сообществе не рекомендуют связывание. Смотрите эту статью, например:
http://drewdev.blogspot.com/2009/01/jsf-component-binding-stinks.html