在 JSF 2(即在 Facelets 中)中,模板是一段静态内容,其中可以包含动态内容。
如果你想使用不同的模板,首先你必须用不同的 URL 路径指向不同的页面,然后不同的页面可以使用不同的模板:
<ui:include src="./header{$HeaderTemplateSuffix}.xhtml" />
然后 headerABC.xml 可以有:
...
<ui:composition ... template="http://someserver/somefileABC">
...
和 headerDEF.xml 可以有
...
<ui:composition ... template="http://someserver/somefileDEF">
...
或者,您可以放弃对标头使用模板,并动态生成所有标头内容(甚至包括静态部分)。
注意:将 html 标头模板合并回主模板不是解决此问题的方法,因为它没有解决标头模板动态的核心挑战。
希望有帮助!干杯:^)
注意:可以在 web.xml 中设置以下内容:
<!-- Time in seconds that facelets should be checked for changes since last request. A value of -1 disables refresh checking. -->
<context-param>
<param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
<param-value>0</param-value>
</context-param>
<!-- Set the project stage to "Development", "UnitTest", "SystemTest", or "Production". -->
<!-- An optional parameter that makes troubleshooting errors much easier. -->
<!-- You should remove this context parameter before deploying to production! -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
但是,这旨在服务于完全不同的目的:允许开发人员动态更改任何静态资源,JSF 容器将动态检查更改并在开发期间加载它。您无意使用它来模拟动态模板,并且设置上述属性将对生产环境中的性能和安全行为产生负面影响。