OmniFaces CDNResourceHandler在未包含在本地时找不到资源

时间:2016-12-12 23:35:10

标签: jsf omnifaces

我正在使用OmniFaces CDNResourceHandler将我的资源指向CDN,而不是本地文件。

我在XHTML文件中添加了这一行:<h:outputStylesheet library="twitter-bootstrap" name="bootstrap.min.css" />

我的faces-config.xml有这一行:

<context-param>
    <param-name>org.omnifaces.CDN_RESOURCE_HANDLER_URLS</param-name>
    <param-value>
        twitter-bootstrap:bootstrap.min.css=https://somehost/twitter-bootstrap/3.3.7/bootstrap.min.css
    </param-value>
</context-param>

访问该页面时出现此错误:

Unable to find resource twitter-bootstrap, bootstrap.min.css

注意:当我在https://somehost/twitter-bootstrap/bootstrap.min.css访问该文件时,我可以正确下载该文件。

我正在使用配置为开发阶段的Wildfly下的Mojarra。

资源处理程序已在faces-config.xml文件中正确配置。

<application>
    <resource-handler>org.omnifaces.resourcehandler.CDNResourceHandler</resource-handler>
</application>

我做了一些测试,我注意到如果我在bootstrap.min.css下创建一个空文件WEBAPP_FOLDER/resources/twitter-bootstrap,则不会发生错误。如果我删除该文件,则会再次出现错误。

即使我使用CDN,我是否需要在本地保留资源?

1 个答案:

答案 0 :(得分:0)

CDNResourceHandler主要用于将自动包含的 JSF资源移至CDN,例如来自jsf.js的{​​{1}}文件或<f:ajax>来自PrimeFaces的{}和primefaces.js,或者在生产中安装时自动切换到CDN。

在您使用永久CDN资源的情况下,您根本不需要它。只需使用普通jquery.js即可。

<link>

the CDNResourceHandler documentation中也明确提到了这一点。

  

对于非JSF资源,您可以继续使用引用外部URL的纯HTML <link rel="stylesheet" src="https://somehost/twitter-bootstrap/bootstrap.min.css" /> <script>元素

更新:因为您并不是第一个对此感到疑惑的人,我根据issue 122绕过了OmniFaces 2.6的技术限制。换句话说,您不一定需要本地资源。