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?
It is the way that the Resource Handler has been implemented in JSF 2.0, by default it will look at the following two path:
1) /resources under the root of the web application.
2) /META-INF/resources when packaged in an external JAR on the classpath.
If you want to use a different name, As mentioned by Alexandre, use the
<script>
and<style>
tags or write your own Resource Handler.More info:
Ryan Lubke's blog entry on JSF 2.0 Resource API
JSF 2.0 spec
You can't specify another directory than resources unless yiu are using
or
OmniFaces CombinedResourceHandler
The folder name is fixed as per chapters 2.6.1.1 and 2.6.1.2 of the JSF specification.
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: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 theFacesServlet
).In your particular case, you'd thus like to use the following setting when having upgraded to JSF 2.2:
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 byServletContext#getResource()
method which is outside control of JSF.