【问题标题】:Omnifaces: Using CombinedResourceHandler with RichfacesOmnifaces:使用 CombinedResourceHandler 和 Richfaces
【发布时间】:2012-11-20 10:44:26
【问题描述】:
当在 Richfaces 应用程序中使用 CombinedResourceHandler 时,只会组合样式表和用户定义脚本。标准 JavaScript 资源和所有 Richfaces 特定资源保持为独立资源。
Omnifaces 文档指出:
RichFaces 在处理多个 JS 文件时存在同样的问题,但到目前为止,解决方法并不是很简单
所以我的问题是这个“重要的解决方法”会是什么?
据我所知,CombinedResourceHandler 在getRendererType() 返回org.richfaces.renderkit.ResourceLibraryRenderer 时不会处理资源。然后由org.richfaces.renderkit.html.ResourceLibraryRenderer 处理。
我不确定在这里将 RichFaces 行为与 OmniFaces 结合起来的最佳方式是什么。
【问题讨论】:
标签:
jsf
richfaces
omnifaces
combinedresourcehandler
【解决方案1】:
我能够通过修改 OmniFaces CombinedResourceHandler 创建解决方案。
简而言之:
Richfaces 利用了一个名为 ResourceLibrarys 的概念,这意味着资源可能不仅是单个文件,而是这些文件的集合。例如,RichFaces 使用名为 base-component.reslib 的资源。 RichFaces ResourceHandler 将此资源依赖解释为对
的依赖
- javax.faces:jsf.js
- jquery.js
- richfaces.js
- richfaces-base-component.js
因此,CombinedResourceHandler 需要一些额外的功能来从 Richfaces ResourceLibraries 中分离出对普通资源的依赖。后者需要根据从 RichFaces 来源获得的规范来解决。
【解决方案2】:
在不修改CombinedResourceHandler 本身的情况下解决这个问题并非易事。 CombinedResourceHandler 本身确实需要修改以使用从 RichFaces 的 org.richfaces.resource.ResourceLibraryFactoryImpl 中提取资源的反射黑客。为了让 OmniFaces 摆脱 RichFaces 依赖项,反射 hack 是必要的,这样它就可以与 PrimeFaces 等其他组件库一起使用。
根据issue 107,这是在 1.3-20121206 中实现的。