jsf-2 - 外部 facelets 模板 - 它是否被缓存?

标签 jsf-2 tomcat7 java-ee-6 facelets

由于显示来自外部源的 header 的给定要求,我们提出了以下设置(在 Tomcat 7 上使用 JEE6):

我们的页面经常使用模板:

...
<ui:composition ... template="/WEB-INF/templates/template.xhtml">
...

此模板除了布置页面结构外,还在其正文中包含另一个 XHTML 文件:

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

然后包含的文件再次使用模板,但这次指向返回 <div> 的外部资源。包含要使用的 header 的元素:

...
<ui:composition ... template="http://someserver/somefile">
...

我知道这个设置有点奇怪,但是为了包含外部生成的 <div>,间接访问是必要的我们必须包含在页面中的元素。 (如果有人可以为给定的问题提供更聪明的解决方案,我会很高兴。)

到目前为止一切正常,但似乎是这种情况,这个包含的文件被我们的 Tomcat 缓存,导致在更改后不显示当前 header 。如果 Tomcat 重新启动,则会显示新 header 。

谁能告诉我这一切在幕后是如何工作的,以及它是否与 Facelets、Tomcat 或我的特定设置有关?

最佳答案

您可能会使用不同级别的多种解决方案: 你可以只实现一个 ResourceResolver并包含来自定义的 URL 的模板(具有定义的 URL,如 external-resource/header.xhtml)。此 ResourceResolver 可能配置有外部引用。

下一个可能性是拥有一个 ServletFilter,它会后处理您的 HTML 并在定义的位置添加 header 。

最后,您可以实现一个简单的自定义组件,以使用 jQuery 等在服务器或客户端加载 header 。

您通常不希望在 facelets 上禁用缓存,因为它会降低性能。

关于jsf-2 - 外部 facelets 模板 - 它是否被缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15903420/

相关文章:

jsf - 自定义 FacesServlet <url-pattern> 去掉 .xhtml 扩展名

java - JSF 如何通过 selectOneRadio 的 onchange 提交表单

java - 我可以使用带有 CDI 的 EJB 无状态 Bean 来维护用户 session 吗?

java - 在应用程序中存储 ip 地址的最佳方法是什么?

java - JSF 2 复合 :actionSource exposing commandButtons in ui:repeat

tomcat - 禁用 Tomcat7 管理器

java - 提高机器学习休息服务性能

tomcat - 部署在 Tomcat 上的 BE 服务的 WSO2 ESB 代理

java - 在哪里可以找到 Java EE 6 XML 库

java - Web 应用程序中 JAR 清理的方法