Tap*_*ose 2 javascript css resources location jsf-2
是否有必要给文件夹命名为"资源"做一个css文件和js文件的引用时h:outputStylesheet和h:outputScript?
因为当我给出文件夹名称"assets"而不是"resources"时,这些文件不会被加载.
这就是我使用这些标签的方式:
<h:head>
<h:outputStylesheet name="css/styles.css"/>
<h:outputScript name="js/site.js"/>
</h:head>
Run Code Online (Sandbox Code Playgroud)
这是我的项目结构:

在屏幕截图中,您可以看到文件夹名称是资源.然后它正在运作.如何指定其他名称?
文件夹名称根据JSF规范的 2.6.1.1和2.6.1.2章节进行修复.
2.6.1.1将资源打包到Web应用程序根目录中
默认实现必须支持路径下Web应用程序根目录中的打包资源
Run Code Online (Sandbox Code Playgroud)resources/<resourceIdentifier>相对于Web应用程序根目录.必须使用
getResource*()ExternalContext上的方法访问打包到Web应用程序根目录中的资源.2.6.1.2将资源打包到Classpath中
对于默认实现,类路径中打包的资源必须位于JAR条目名称下:
Run Code Online (Sandbox Code Playgroud)META-INF/resources/<resourceIdentifier>必须使用通过调用当前方法获得的
getResource*()方法来访问打包到类路径中的资源.ClassLoadergetContextClassLoader()Thread
在两种情况下都提到"必须".它没有提到有关更改这些路径的可能配置选项的任何信息.这适用于JSF 2.0和JSF 2.1.
但是,在即将到来的JSF 2.2中,根据JSF规范,问题996可以通过新的javax.faces.WEBAPP_RESOURCES_DIRECTORY上下文参数来更改路径,该参数将相对于webcontent root的路径作为参数值:
<context-param>
<param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
<param-value>WEB-INF/resources</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
此示例将移动/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>
Run Code Online (Sandbox Code Playgroud)
请注意,这仅涵盖第2.6.1.1节中指定的webapp自己的资源,而不是第2.6.1.2节中指定的JAR资源.JAR资源的路径仍然应该META-INF/resources由Servlet API规范控制,而不是JSF规范.它就是通过ServletContext#getResource()JSF外部控制的方法获得的封面.