我有一个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">
。 我有两个想法:
- 我可以将
<meta name="description".../>
放在标题页并在包含页面上覆盖它吗? - 或者也许我可以以某种方式将这个
<meta.../>
从包含页面放到标题?
几种方式:
-
使用不带
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>
-
将
<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>
-
只需将
<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 中,哪些不需要?