<f: viewAction>, включенный в шаблон клиента facelets, не работает
Просто вопрос.... не знаю, правильно ли я сделал или это не будет работать по спецификации. Я сделал простой шаблон мастера Facelets, например так:
template.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<f:view>
<ui:insert name="metadata" />
<h:head>
.... here the rest of template with other <ui:insert>
Клиент прост и использует шаблон:
main.xhtml
<ui:composition xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
template="./WEB-INF/template/template.xhtml">
<ui:define name="metadata">
<ui:include src="./WEB-INF/template/securityCheck.xhtml" />
</ui:define>
... here goes the rest with other <ui:define> and <ui:include> ....
В securityCheck.xhtml лежит простой f:viewAction
следующим образом:
securityCheck.xhtml
<ui:composition xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<f:metadata>
<f:viewAction action="#{loginController.doLoginCheck()}" />
</f:metadata>
</ui:composition>
Что ж, в этом случае f:viewAction не вызывается, вместо этого, если я разверну код непосредственно в разделе метаданных, как показано ниже:
main.xhtml
<ui:composition xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
template="./WEB-INF/template/template.xhtml">
<ui:define name="metadata">
<f:metadata>
<f:viewAction action="#{loginController.doLoginCheck()}" />
</f:metadata>
</ui:define>
... here goes the rest with other <ui:define> and <ui:include> ....
это работает как шарм (как и ожидалось). Почему не работает включение раздела метаданных в шаблон клиента? И если есть правильный способ сделать это, как я могу добавить другие вызовы f:viewAction после включенного? Что-то вроде этого:
otherpage.xhtml
<ui:composition xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
template="./WEB-INF/template/template.xhtml">
<ui:define name="metadata">
<ui:include src="./WEB-INF/template/securityCheck.xhtml" />
<f:metadata>
<f:viewAction action="#{myBean.doSomething()}" />
</f:metadata>
</ui:define>
... here goes the rest with other <ui:define> and <ui:include> ....
Если это правильно, звонки сделаны в этом конкретном порядке?
Я использую JavaEE 7/JSF 2.2 с Glassfish 4.1 и Mojarra 2.2.12 impl.
Спасибо.