2015-07-28 3 views
0

В JSF для каждой страницы JSF создается корень представления. Когда он построен?Когда ViewRoot создан в JSF?

Состоит ли он каждый раз при визуализации вида или зависит от инициализации бэк-файла?

ответ

1

В JSF для каждой страницы JSF создается корень представления. Когда он построен?

В основном, когда JSF Жизненный цикл вызывает ViewHandler#createView(), который в свою очередь вызвать ViewDeclarationLanguage#createView(). Это может произойти в фазе восстановления. Но это также может произойти во время фазы отклика при наступлении навигации. Или когда JSF необходимо извлечь metadata с данного вида. Это также может произойти в любое время, когда пользовательский код явно вызывает ViewHandler#createView(). Ничто в спецификации JSF не ограничивает это до определенного момента.


это построить ли каждый раз, когда вид делает или зависит от резервного инициализации боб?

Не может зависеть от инициализации боба. Без представления JSF не имел бы представления о том, какие beans для инициализации просто потому, что эти bean-компоненты объявлены в самом представлении.

0

Когда он построен?

Он построен во время RESTORE_VIEW фазы жизненного цикла, то есть, когда страница первой просьбы, и она представлена ​​как пример UIViewRoot

построить ли это каждый раз, когда вид делает или зависит от резервного боба инициализация?

Он создается непосредственно перед визуализацией страницы. В то время как вы обычно получаете новый UIViewRoot для каждого запроса страницы, возможно, вы можете повторно использовать один и тот же объект из предыдущего рендеринга представления, и спецификация JSF поддерживает это. Из спецификации:

[В] RESTORE_VIEW Проверьте FacesContext экземпляр для текущего запроса. Если она уже содержит UIViewRoot:

Установите локаль на этом UIViewRoot до значения, возвращаемого методом getRequestLocale() на ExternalContext для этого запроса. Не предпринимайте никаких действий на этом этапе и возвращайтесь. Наличие UIViewRoot, уже установленного в FacesContext перед реализацией фазы восстановления, указывает, что фаза должна предполагать, что представление уже восстановлено другими способами.

Там действительно не так много вы можете сделать внутри подложки боб собственно к изменяют UIViewRoot, скорее, PhaseListener или ViewHandler лучше подходит для такого вмешательства

Связанный:

+0

Восстановление фазы просмотра всегда будет создавать представление, но представление не всегда создается во время фазы восстановления. – BalusC

Смежные вопросы