将元包含到 JSF



我有一个JSF页面,其中包含来自另一个页面的<head>...</head>。基本上它看起来像这样:

<ui:include src="/path/head.xhtml"/>
<h:body>
...
</h:body>

我想为每个使用<ui:include src="/path/head.xhtml"/>的页面添加唯一的<meta name="description" content="Unique content">。 我有两个想法:

  1. 我可以将<meta name="description".../>放在标题页并在包含页面上覆盖它吗?
  2. 或者也许我可以以某种方式将这个<meta.../>从包含页面放到标题?

几种方式:

  1. 使用不带name<ui:insert>,并让<ui:include>正文覆盖它:

    /WEB-INF/includes/head.xhtml

    <h:head>
    ...
    <ui:insert>
    <meta name="description" content="Default description" />
    </ui:insert>
    ...
    </h:head>
    

    /page.xhtml

    <ui:include src="/WEB-INF/includes/head.xhtml">
    <meta name="description" content="Overridden description" />
    </ui:include>
    
  2. <ui:insert>name一起使用,并使用<ui:decorate><ui:define>而不是<ui:include>

    /WEB-INF/includes/head.xhtml

    <h:head>
    ...
    <ui:insert name="description">
    <meta name="description" content="Default description" />
    </ui:insert>
    ...
    </h:head>
    

    /page.xhtml

    <ui:decorate template="/WEB-INF/includes/head.xhtml">
    <ui:define name="description">
    <meta name="description" content="Overridden description" />
    </ui:define>
    </ui:decorate>
    
  3. 只需将<ui:param>仅与元内容一起使用即可在已有默认描述时保持代码干燥:

    /WEB-INF/includes/head.xhtml

    <h:head>
    ...
    <meta name="description" content="#{empty description ? 'Default description' : description}" />
    ...
    </h:head>
    

    /page.xhtml

    <ui:include src="/WEB-INF/includes/head.xhtml">
    <ui:param name="description" value="Overridden description" />
    </ui:include>
    

另请参阅:

  • 如何使用JSF 2.0 Facelets在XHTML中包含另一个XHTML?
  • 我需要将哪些 XHTML 文件放入/WEB-INF 中,哪些不需要?

最新更新