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

OmniFaces CDNResourceHandler could not find resources when not included locally

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

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

我的脸-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>

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

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

CDNResourceHandler 的主要目的是将 自动包含的 JSF 资源移动到 CDN,例如 <f:ajax> 中的 jsf.js 文件,或来自 PrimeFaces 的 primefaces.jsjquery.js,或者在生产中安装时自动切换到 CDN。

对于永久 CDN 资源,您不需要它。只需使用普通 <link>

<link rel="stylesheet" src="https://somehost/twitter-bootstrap/bootstrap.min.css" />

这在the CDNResourceHandler documentation中也有明确提及。

For non-JSF resources, you can just keep using plain HTML <script> and <link> elements referring the external URL


更新:因为您不是第一个对此感到疑惑的人,我已经按照 issue 122 绕过了 OmniFaces 2.6 的这一技术限制。换句话说,你不再需要本地资源了。