根据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*()
方法来访问。ClassLoader
getContextClassLoader()
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 控制的方法获得的。