Технически, не имеет значения, где вы объявляете <f:metadata>
в представлении, если оно находится в представлении верхнего уровня (поэтому, при использовании шаблонов, в клиенте шаблона и, следовательно, не в главном шаблоне). Когда представление создается, метаданные в основном не являются частью дерева компонентов JSF, а являются корневым представлением (которое можно получить для каждого представления по ViewDeclarationLanguage#getViewMetadata()
).
В большинстве случаев самодокументирование помещает <f:metadata>
в верхнюю часть представления, чтобы вы могли видеть любые метаданные на первый взгляд без необходимости прокручивать до половины или вниз исходный код представления.
При использовании простой страницы просто поместите ее прямо перед <h:head>
.
<!DOCTYPE html>
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<f:metadata>
<f:viewParam name="userId" value="#{bean.userId}" />
<f:viewParam name="startRecord" value="#{bean.startRecord}" />
<f:viewParam name="pageSize" value="#{bean.pageSize}" />
<f:viewParam name="sort" value="#{bean.sort}" />
</f:metadata>
<h:head>
...
</h:head>
<h:body>
...
</h:body>
</html>
При использовании шаблонов рекомендуемый подход, как указано в документации <f:metadata>
тега , заключается в объявлении отдельного <ui:insert name="metadata">
в главном шаблоне и разрешении клиенту определить <f:metadata>
в <ui:define name="metadata">
.
<ui:composition template="/WEB-INF/pattern.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<ui:define name="metadata">
<f:metadata>
<f:viewParam name="userId" value="#{bean.userId}" />
<f:viewParam name="startRecord" value="#{bean.startRecord}" />
<f:viewParam name="pageSize" value="#{bean.pageSize}" />
<f:viewParam name="sort" value="#{bean.sort}" />
</f:metadata>
</ui:define>
<ui:define name="content">
<h1>Data Table</h1>
...
</ui:define>
</ui:composition>