JSF和自动重新加载xhtml文件



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

JRebel成功地重新加载了/WebContent下的常规Java类和js/css文件,但没有加载JSF的.xhtml文件。为了在服务器上更新xhtml文件,需要进行一次完整的重新发布。

经过反复试验,我终于通过在web.xml中添加一些facelets参数并创建一个自定义的ResourceResolver来工作。

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

  • 为什么需要自定义资源解析器?
  • 是不是JRebel应该通过监控/WebContent的xhtml文件驻留处理这个?
  • 我猜它有一些与Facelets/JSF编译xhtml servlet(?)通过FacesServlet JRebel无法检测?

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做了这些(甚至更多)。

我是这样为自己解决这个问题的:

  1. 验证facelets插件是否在JRebel设置中启用&
  2. 验证你在web.xml 中使用Project Stage Development

相关内容

  • 没有找到相关文章

最新更新