Jsf 使用<;用户界面:组合>;模板,我应该在哪里声明<;f:元数据>;?

Jsf 使用<;用户界面:组合>;模板,我应该在哪里声明<;f:元数据>;?,jsf,metadata,facelets,composition,templating,Jsf,Metadata,Facelets,Composition,Templating,在将JSF应用程序转换为书籍标记页面方面,我已经取得了很大的进展,但我想知道我的做法是否正确。一个问题是f:metadata标记是否有最佳实践位置 我的典型Facelets客户端页面如下所示: <ui:composition template="./pattern.xhtml"> <ui:define name="content"> <f:metadata> <f:vie

在将JSF应用程序转换为书籍标记页面方面,我已经取得了很大的进展,但我想知道我的做法是否正确。一个问题是f:metadata标记是否有最佳实践位置

我的典型Facelets客户端页面如下所示:

    <ui:composition template="./pattern.xhtml">

        <ui:define name="content">

            <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>

            <h1>Data Table</h1>

etc

数据表
等

因此,在我的页面主体中会遇到f:metadata和childf:viewParam标记。我的模式.xhtml模板还有一个部分(名为“header”),可以将这些标记放在header部分。应该放在那里吗?这会有什么不同吗?或者我设置了一些我还没有看到的副作用吗?

从技术上讲,在视图中声明
的位置并不重要,只要它在顶层视图中(因此,在使用模板时,在模板客户机中,而不是在主模板中)。构建视图时,元数据基本上不是JSF组件树的一部分,而是视图根的一部分(您可以通过以下方式在每个视图的基础上获取)

大多数自文档将是将
放在视图的顶部,这样您就可以第一眼看到任何元数据,而无需滚动到视图源代码的一半或底部

使用普通页面时,只需将其放在
前面即可


...
...
使用模板时,如中所述,推荐的方法是在主模板中声明一个单独的
,并让客户端在
中定义


数据表
...

从技术上讲,在视图中声明
的位置并不重要,只要它在顶层视图中就行(因此,使用模板时,在模板客户机中,而不是在主模板中)。构建视图时,元数据基本上不是JSF组件树的一部分,而是视图根的一部分(您可以通过以下方式在每个视图的基础上获取)

大多数自文档将是将
放在视图的顶部,这样您就可以第一眼看到任何元数据,而无需滚动到视图源代码的一半或底部

使用普通页面时,只需将其放在
前面即可


...
...
使用模板时,如中所述,推荐的方法是在主模板中声明一个单独的
,并让客户端在
中定义


数据表
...

我必须说,这看起来比我一直在做的事情要干净一点。不知何故,我没有想到仅仅为了元数据目的而创建ui:insert,但我现在会这样做。这是否意味着不能将
f:metadata
放置在页面模板中以使其可重用?如果在渲染每个视图之前,我们希望对它们执行某些操作,那么该怎么办?@Xtreme:只需使用
。它实际上不需要放在
中。另请参见@BalusC,关于将其放在
之前,同样的内容是:
这必须是
的子项。在顶层是否有一个隐式的
f:view
。这是
UIViewRoot
。我必须说,这看起来比我一直在做的事情要干净一点。不知何故,我没有想到仅仅为了元数据目的而创建ui:insert,但我现在会这样做。这是否意味着不能将
f:metadata
放置在页面模板中以使其可重用?如果在渲染每个视图之前,我们希望对它们执行某些操作,那么该怎么办?@Xtreme:只需使用
。它实际上不需要放在
中。另请参见@BalusC,关于将其放在
之前,同样的内容是:
这必须是
的子项。在顶层是否有一个隐式的
f:view
。这是
UIViewRoot
。另见
<!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>
<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>