В JSF для каждой страницы JSF создается корень представления. Когда он построен?Когда ViewRoot создан в JSF?
Состоит ли он каждый раз при визуализации вида или зависит от инициализации бэк-файла?
В JSF для каждой страницы JSF создается корень представления. Когда он построен?Когда ViewRoot создан в JSF?
Состоит ли он каждый раз при визуализации вида или зависит от инициализации бэк-файла?
В JSF для каждой страницы JSF создается корень представления. Когда он построен?
В основном, когда JSF Жизненный цикл вызывает ViewHandler#createView()
, который в свою очередь вызвать ViewDeclarationLanguage#createView()
. Это может произойти в фазе восстановления. Но это также может произойти во время фазы отклика при наступлении навигации. Или когда JSF необходимо извлечь metadata с данного вида. Это также может произойти в любое время, когда пользовательский код явно вызывает ViewHandler#createView()
. Ничто в спецификации JSF не ограничивает это до определенного момента.
это построить ли каждый раз, когда вид делает или зависит от резервного инициализации боб?
Не может зависеть от инициализации боба. Без представления JSF не имел бы представления о том, какие beans для инициализации просто потому, что эти bean-компоненты объявлены в самом представлении.
Когда он построен?
Он построен во время RESTORE_VIEW
фазы жизненного цикла, то есть, когда страница первой просьбы, и она представлена как пример UIViewRoot
построить ли это каждый раз, когда вид делает или зависит от резервного боба инициализация?
Он создается непосредственно перед визуализацией страницы. В то время как вы обычно получаете новый UIViewRoot
для каждого запроса страницы, возможно, вы можете повторно использовать один и тот же объект из предыдущего рендеринга представления, и спецификация JSF поддерживает это. Из спецификации:
[В]
RESTORE_VIEW
ПроверьтеFacesContext
экземпляр для текущего запроса. Если она уже содержитUIViewRoot
:Установите локаль на этом
UIViewRoot
до значения, возвращаемого методомgetRequestLocale()
наExternalContext
для этого запроса. Не предпринимайте никаких действий на этом этапе и возвращайтесь. НаличиеUIViewRoot
, уже установленного в FacesContext перед реализацией фазы восстановления, указывает, что фаза должна предполагать, что представление уже восстановлено другими способами.
Там действительно не так много вы можете сделать внутри подложки боб собственно к изменяют UIViewRoot
, скорее, PhaseListener
или ViewHandler
лучше подходит для такого вмешательства
Связанный:
Восстановление фазы просмотра всегда будет создавать представление, но представление не всегда создается во время фазы восстановления. – BalusC