JSF <ui: include> содержит страницу с событием preRenderView, которое не вызывается в <h: body>
Я использую JSF 2.0.1 и наблюдаю разницу при попытке добавить header.xhtml
на другую страницу с <ui:include src="header.xhtml"></ui:include>
пример кода ниже:
header.xhtml
Эта страница будет добавлена как один компонент на главную страницу, она содержит preRenderView
событие, используемое для проверки, разрешено ли пользователю входить на эту главную страницу.
<h:head>
<title>Header</title>
</h:head>
<f:event type="preRenderView" listener="#{authorize.checkAuthentication}"/>
<h:body></h:body>
Если я использую <ui:include src="header.xhtml"></ui:include>
внутри <h:body>
раздел на главной странице, как показано ниже:
Major.xhtml
<h:head>
<title>Major</title>
</h:head>
<h:body>
<ui:include src="header.xhtml"></ui:include>
<f:view></f:view>
</h:body>
Проблема в <f:event>
в header.xhtml
не срабатывает, другими словами checkAuthentication
функция не работает в этом случае.
Но если я перееду <ui:include src="header.xhtml"></ui:include>
снаружи <h:body>
раздел на главной странице и поставить его впереди <h:body>
, событие сработало и функция работает.
<h:head>
<title>Major</title>
</h:head>
<ui:include src="header.xhtml"></ui:include>
<h:body>
<f:view></f:view>
</h:body>
Может ли кто-нибудь помочь мне объяснить, почему происходит такая разница? Есть ли какой-нибудь профессиональный способ решить это дело, как сохранить содержимое страницы заголовка, а также вызвать событие? Спасибо
Примечание: я также проверяю этот билет, но не уверен, что мы находимся в том же случае