2

h:outputStylesheet在and中引用css文件和js文件时是否需要给文件夹名称“resources” h:outputScript

因为当我给文件夹名称“assets”而不是“resources”时,这些文件没有加载。

这就是我使用这些标签的方式:

<h:head>
    <h:outputStylesheet name="css/styles.css"/>
    <h:outputScript name="js/site.js"/>
</h:head>

这是我的项目结构:

在此处输入图像描述

在屏幕截图中,您可以看到文件夹名称是资源。然后它正在工作。如何指定不同的名称?

4

3 回答 3

7

根据JSF 规范的第 2.6.1.1 和 2.6.1.2 章,文件夹名称是固定的。

2.6.1.1 将资源打包到 Web 应用程序根目录中

默认实现必须支持在web应用根路径下打包资源

resources/<resourceIdentifier>

相对于 Web 应用根目录。必须使用getResource*()ExternalContext 上的方法访问打包到 Web 应用根目录中的资源。

2.6.1.2 将资源打包到类路径中

对于默认实现,打包在类路径中的资源必须位于 JAR 条目名称下:

META-INF/resources/<resourceIdentifier>

打包到类路径中的资源必须使用调用当前方法获得的getResource*()方法来访问。ClassLoadergetContextClassLoader()Thread

它在这两种情况下都提到了“必须”。它没有提及任何有关更改这些路径的可能配置选项的内容。这适用于 JSF 2.0 和 JSF 2.1。

然而,在即将到来的 JSF 2.2 中,根据JSF 规范 issue 996,可以通过新的javax.faces.WEBAPP_RESOURCES_DIRECTORY上下文参数更改路径,该参数将相对于 webcontent 根的路径作为参数值:

<context-param>
    <param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
    <param-value>WEB-INF/resources</param-value> 
</context-param>

此示例将/resources文件夹移动到/WEB-INF,从而确保更高的安全性(即现在不再可能独立于 访问这些资源FacesServlet)。

因此,在您的特定情况下,您希望在升级到 JSF 2.2 时使用以下设置:

<context-param>
    <param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
    <param-value>assets</param-value> 
</context-param>

请注意,这仅涵盖第 2.6.1.1 章中指定的 webapp 自己的资源,而不是第 2.6.1.2 章中指定的 JAR 资源。JAR 资源的路径应该仍然META-INF/resources是由 Servlet API 规范而不是 JSF 规范控制的。它是通过ServletContext#getResource()不受 JSF 控制的方法获得的。

于 2012-12-04T19:15:31.623 回答
1

除非 yiu 正在使用,否则您不能指定其他目录而不是资源

<style></style>

或者

OmniFaces CombinedResourceHandler

于 2012-12-02T21:33:49.490 回答
1

这是资源处理程序在 JSF 2.0 中实现的方式,默认情况下它会查看以下两个路径:

1) /resources 在 Web 应用程序的根目录下。

2) /META-INF/resources 打包在类路径上的外部 JAR 中时。

如果您想使用不同的名称,正如 Alexandre 所提到的,请使用<script>and<style>标签或编写您自己的资源处理程序。

更多信息:

于 2012-12-03T15:38:50.433 回答