JSF 和 Facelets 文件自动重新加载

问题描述 投票:0回答:2

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

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

通过反复试验,我终于通过向 web.xml 添加一些 Facelets 参数并创建自定义 ResourceResolver(如本博客文章中所述)来工作。 但是,我想知道为什么这会起作用,更具体地说:

为什么需要自定义ResourceResolver?
  • JRebel 不是应该通过监视 xhtml 文件所在的 /WebContent 来处理这个问题吗?
  • 我猜这与 Facelets/JSF 通过 FacesServlet 将 xhtml 编译为 servlet(?)有关,而 JRebel 无法检测到?
jsf facelets mojarra jrebel
2个回答
48
投票

问题是 Facelets 会进行缓存,并且不会重新读取更改的文件。要强制重新加载,请在

web.xml

中指定以下参数之一。

JSF 2+

(Facelets 2+): <!-- 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 or override via Server's JNDI config! --> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param>

这将自动将“Facelets刷新周期”配置设置为0,从而有效禁用Facelets缓存。

或者,如果您不想改变项目阶段,那么

<!-- Time in seconds that facelets should be checked for changes since last request. A value of -1 disables auto-refresh. --> <!-- You should remove this context parameter before deploying to production or use PROJECT_STAGE instead! --> <context-param> <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name> <param-value>0</param-value> </context-param>

对于 Faces 4.x,
javax.

前缀应改为

jakarta.
,如
jakarta.faces.PROJECT_STAGE
jakarta.faces.FACELETS_REFRESH_PERIOD

对于
JSF 1.2

(Facelets 1.x),等效参数是: <context-param> <param-name>facelets.DEVELOPMENT</param-name> <param-value>true</param-value> </context-param>

<context-param>
    <param-name>facelets.REFRESH_PERIOD</param-name>
    <param-value>0</param-value>
</context-param>
有关 JSF 上下文参数的更多信息:
http://docs.jboss.org/jbossas/6/JSF_Guide/en-US/html/jsf.reference.html#standard.config.params

您的情况不需要该自定义资源解析器。该资源解析器只是从自定义文件系统文件夹获取 xhtml 文件的一种棘手方法。在你的例子中,JRebel 做到了这一点(甚至更多)。


1
投票

验证您的 JRebel 设置中是否启用了
    facelets
  1. 插件 &
    确认您在 
  2. Project Stage
  3.  中使用 
    Development
    web.xml
    
        
© www.soinside.com 2019 - 2024. All rights reserved.