是否可以更改h:outputStylesheet和h:outputScript使用的/ resources文件夹名称

时间:2012-12-02 17:20:20

标签: javascript css jsf-2 resources location

h:outputStylesheeth:outputScript中引用css文件和js文件时是否需要提供文件夹名称“resources”?

因为当我提供文件夹名称“assets”而不是“resources”时,不会加载这些文件。

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

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

这是我的项目结构:

enter image description here

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

3 个答案:

答案 0 :(得分:6)

根据JSF specification的章节2.6.1.1和2.6.1.2修复文件夹名称。

  

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

     

默认实现必须支持Web应用程序根目录中的打包资源   在路径下

     
resources/<resourceIdentifier>
     

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

     

2.6.1.2将资源打包到类路径

     

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

     
META-INF/resources/<resourceIdentifier>
     

必须使用getResource*()的{​​{1}}方法访问打包到类路径中的资源,方法是调用当前ClassLoader的{​​{1}}方法。

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

在即将推出的JSF 2.2中,按JSF spec issue 996可以通过新的getContextClassLoader()上下文参数更改路径,该参数将相对于webcontent root的路径作为参数值:< / p>

Thread

此示例将javax.faces.WEBAPP_RESOURCES_DIRECTORY文件夹移动到<context-param> <param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name> <param-value>WEB-INF/resources</param-value> </context-param> ,从而确保更高的安全性(即现在不再能够独立于/resources访问这些资源)。

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

/WEB-INF

请注意,这仅涵盖第2.6.1.1节中指定的webapp自己的资源,而不是第2.6.1.2节中指定的JAR资源。 JAR资源的路径仍应为FacesServlet,因为它由Servlet API规范控制,而不是JSF规范。它是由ServletContext#getResource()方法获得的封面,它不受JSF的控制。

答案 1 :(得分:1)

除非您使用

,否则无法指定除资源之外的其他目录
<style></style>

OmniFaces CombinedResourceHandler

答案 2 :(得分:1)

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

1)/ web应用程序根目录下的资源。

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

如果您想使用其他名称,如Alexandre所述,请使用<script><style>标记,或编写您自己的资源处理程序。

更多信息: