JSF 和自动重新加载 xhtml 文件

2022-09-01 17:02:28

我在使用JRebel,Spring,JSF Mojarra 2.0.3和WebLogic 10.3热重新加载XHTML文件时遇到了一些问题。

JRebel 成功地在 /WebContent 下重新加载常规 Java 类和 js/css 文件,但 JSF 的.xhtml文件不会。完全重新发布对于在服务器上更新 xhtml 文件是必要的。

通过反复试验,我最终通过向Web添加一些facelets参数.xml并创建自定义资源解析器(如这篇博客文章中所述)来使其正常工作。

但是,我想知道为什么这有效,更具体地说:

  • 为什么需要自定义资源解析器?
  • JRebel难道不应该通过监视xhtml文件所在的/WebContent来处理这个问题吗?
  • 我猜它与Facelets /JSF通过FacesServlet将xhtml编译为servlets(?)有关,JRebel无法检测到?

答案 1

JRebel 处理 /WebContent 文件夹更改。

问题是Facelets执行缓存并且不重新读取更改的文件。要强制重读,请在 中指定以下参数。web.xml

JSF 2 (Facelets 2.x):

<!-- 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 1.2(Facelets 1.x),参数为:

<context-param>
    <param-name>facelets.REFRESH_PERIOD</param-name>
    <param-value>0</param-value>
</context-param>
<context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>true</param-value>
</context-param>

有关 JSF 上下文参数的更多信息:http://docs.jboss.org/jbossas/6/JSF_Guide/en-US/html/jsf.reference.html#standard.config.params

对于您的情况,不需要该自定义资源解析程序。该资源解析器只是从自定义文件系统文件夹中获取xhtml文件的一种棘手方法。在你的情况下,JRebel就是这样做的(甚至更多)。


答案 2

以下是我为解决此问题的方法:

  1. 验证插件是否已在 JRebel 设置中启用 &facelets
  2. 验证您是否在Project Stageweb.xml

推荐