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>   

Может ли кто-нибудь помочь мне объяснить, почему происходит такая разница? Есть ли какой-нибудь профессиональный способ решить это дело, как сохранить содержимое страницы заголовка, а также вызвать событие? Спасибо

Примечание: я также проверяю этот билет, но не уверен, что мы находимся в том же случае

0 ответов

Другие вопросы по тегам