Что такое связывание компонентов в JSF? Когда предпочтительнее использовать?

Я прочитал о связывании компонентов с атрибутом binding в следующих вопросах:

Я понимаю, что он привязывает компонент пользовательского интерфейса за тегом JSF в представлении к свойству UIComponent в базе bean. Однако я смущен тем, что такое использование связывания компонентов и когда мы должны его использовать. Может ли кто-нибудь объяснить это более простым способом и привести некоторые практические примеры?

Ответ 1

Вы должны использовать его, если хотите иметь доступ ко всему UIComponent, а не только к его значению. Например, для доступа к некоторым методам, которые не могут быть вызваны/связаны в представлении. На это ответили в первом вопросе, который вы нашли: Связывание компонентов JSF - некоторая путаница

Второй вопрос, который вы нашли, связывание компонентов vs findComponent() - когда использовать, что?, просто отвечает "binding versus findComponent()", это не отвечает "binding versus value" вообще, как вы, кажется, думаете. Пожалуйста, не путайте это. value, очевидно, победит binding.

В коде реального мира привязка компонента к поддержке bean часто используется только тогда, когда разработчику необходимо программно манипулировать своими детьми, например, component.getChildren().add(...). Тем не менее, bean должен быть запрошен. Более широкий охват может привести к несогласованности, поскольку экземпляры компонентов в основном создаются по принципу запроса и не должны использоваться для разных запросов. Сфера видимости также может быть, но это очень неэффективно для памяти, а для версий Mojarra старше 2.1.18 также должно быть отключено частичное сохранение состояния, иначе экземпляр bean, на который ссылается binding, будет неявным образом воссоздаваться на каждый запрос. См. Также JSTL в JSF2 Facelets... имеет смысл? для соответствующего ответа.

Также возможно привязать компонент к "представлению". Например.

<h:someComponent binding="#{some}">

Это относится к экземпляру UIComponent в области Facelet ( "область страницы" ). Это позволяет использовать, например, #{some.clientId}, #{some.value} в другом месте на той же странице. Обратите внимание, что здесь не задействована никакая поддержка bean. См. Также привязка компонентов JSF без свойства bean.

Вот некоторые инструменты для использования в реальном мире атрибута binding: