Is it possible to change the /resources folder name which is used by h:outputStylesheet and h:outputScript
css, javascript, jsf-2, location, resources
Solution
The folder name is fixed as per chapters 2.6.1.1 and 2.6.1.2 of the JSF specification.
2.6.1.1 Packaging Resources into the Web Application Root
The default implementation must support packaging resources in the web application root under the path
resources/<resourceIdentifier>
relative to the web app root. Resources packaged into the web app root must be accessed using the `getResource*()` methods on ExternalContext.
2.6.1.2 Packaging Resources into the Classpath
For the default implementation, resources packaged in the classpath must reside under the JAR entry name:
META-INF/resources/<resourceIdentifier>
Resources packaged into the classpath must be accessed using the `getResource*()` methods of the `ClassLoader` obtained by calling the `getContextClassLoader()` method of the current `Thread`.
It mentions "must" in both cases. It does not mention anything about a possible configuration option to change those paths. This applies to both JSF 2.0 and JSF 2.1.
In the upcoming JSF 2.2, however, it will as per JSF spec issue 996 be possible to change the path by the new `javax.faces.WEBAPP_RESOURCES_DIRECTORY` context parameter which takes a path relative to the webcontent root as parameter value:
<context-param>
<param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
<param-value>WEB-INF/resources</param-value>
</context-param>
This example will move the `/resources` folder into `/WEB-INF`, hereby ensuring more security (i.e. it is now not possible anymore to access those resources independently from the `FacesServlet`).
In your particular case, you'd thus like to use the following setting when having upgraded to JSF 2.2:
<context-param>
<param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
<param-value>assets</param-value>
</context-param>
Note that this only covers webapp's own resources as specified in chapter 2.6.1.1, not the JAR resources as specified in chapter 2.6.1.2. The path of JAR resources should still be `META-INF/resources` as this is controlled by Servlet API specification, not the JSF specification. It's namely under the covers obtained by `ServletContext#getResource()` method which is outside control of JSF.
Problem
Is it necessary to give the folder name "resources" when making the reference of a css file and js file in `h:outputStylesheet` and `h:outputScript`? Cause when I am giving the folder name "assets" instead of "resources" these files are not loaded. This is how I am using these tags: ``` <h:head> <h:outputStylesheet name="css/styles.css"/> <h:outputScript name="js/site.js"/> </h:head> ``` And here is my project structure: In the screenshot you can see the folder name is resources. And then it is working. How can I specify a different name?