首页 > 解决方案 > 将元数据包含到 JSF

问题描述

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

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

我想为<meta name="description" content="Unique content">每个使用 <ui:include src="/path/head.xhtml"/>. 我有两个想法:

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

标签: jsffacelets

解决方案


几种方式:

  1. <ui:insert>不使用并覆盖它name的主体:<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>withname和使用<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>元内容来保持代码 DRY:

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

也可以看看:


推荐阅读