在h:outputStylesheet和h:outputScript中引用css文件和js文件时,是否需要给出文件夹名?
因为当我给文件夹命名为"assets“而不是"resources”时,这些文件不会被加载。
这就是我使用这些标签的方式:
<h:head>
<h:outputStylesheet name="css/styles.css"/>
<h:outputScript name="js/site.js"/>
</h:head>下面是我的项目结构:

在屏幕截图中,您可以看到文件夹名为resources。然后它就起作用了。如何指定不同的名称?
发布于 2012-12-05 03:15:32
文件夹名称按照JSF specification的第2.6.1.1和2.6.1.2章固定。
2.6.1.1将资源打包到网络应用程序根目录中
默认实现必须支持将资源打包到路径下的web应用程序根目录中
资源/
相对于web应用程序根目录。打包到web应用程序根目录中的资源必须使用ExternalContext上的getResource*()方法进行访问。
2.6.1.2将资源打包到类路径中
对于默认实现,类路径中打包的资源必须位于JAR条目名称下:
META-INF/resources/
必须使用ClassLoader的getResource*()方法访问打包到类路径中的资源,该方法通过调用当前Thread的getContextClassLoader()方法获得。
在这两种情况下,它都提到了“必须”。它没有提到任何关于更改这些路径的可能配置选项。这适用于JSF 2.0和JSF 2.1。
然而,在即将到来的JSF2.2中,根据JSF spec issue 996,可以通过新的javax.faces.WEBAPP_RESOURCES_DIRECTORY上下文参数更改路径,该参数采用相对于new内容根的路径作为参数值:
<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-03 05:33:49
您不能指定除resources之外的其他目录,除非您正在使用
<style></style>或
OmniFaces CombinedResourceHandler
发布于 2012-12-03 23:38:50
这是资源处理程序在JSF 2.0中实现的方式,默认情况下,它将查看以下两个路径:
1) web应用根目录下的/resources。
2) /META-INF/resources打包到类路径上的外部JAR中。
如果您想使用不同的名称,就像Alexandre提到的那样,使用<script>和<style>标签,或者编写您自己的资源处理程序。
更多信息:
https://stackoverflow.com/questions/13671704
复制相似问题