在h:outputStylesheet
和h:outputScript
中引用css文件和js文件时是否需要提供文件夹名称“resources”?
因为当我提供文件夹名称“assets”而不是“resources”时,不会加载这些文件。
这就是我使用这些标签的方式:
<h:head>
<h:outputStylesheet name="css/styles.css"/>
<h:outputScript name="js/site.js"/>
</h:head>
这是我的项目结构:
在屏幕截图中,您可以看到文件夹名称是资源。然后它正在运作。如何指定其他名称?
答案 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)
答案 2 :(得分:1)
这是在JSF 2.0中实现资源处理程序的方式,默认情况下它将查看以下两个路径:
1)/ web应用程序根目录下的资源。
2)/ META-INF /资源打包在类路径上的外部JAR中。
如果您想使用其他名称,如Alexandre所述,请使用<script>
和<style>
标记,或编写您自己的资源处理程序。
更多信息: