The first step is to route requests to the
DispatcherServlet in the web.xml file. In this
example, we map all URLs that begin with /spring/ to the
servlet. The servlet needs to be configured. An init-param is
used in the servlet to pass the contextConfigLocation. This
is the location of the Spring configuration for your web
application.
<servlet>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/web-application-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
<url-pattern>/spring/*</url-pattern>
</servlet-mapping>
In order for JSF to bootstrap correctly, the
FacesServlet must be configured in web.xml as it
normally would even though you generally will not need to route requests
through it at all when using JSF with Spring Web Flow.
<!-- Just here so the JSF implementation can initialize, *not* used at runtime -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Just here so the JSF implementation can initialize -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
The use of Facelets instead of JSP typically requires this in web.xml:
!-- Use JSF view templates saved as *.xhtml, for use with Facelets -->
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.xhtml</param-value>
</context-param>
When using the JSF 1.2 Spring Faces component library, you also need to configure a servlet for serving CSS and JavaScript resources. This servlet must be mapped to /resources/* in order for the URL's rendered by the components to function correctly.
<!-- Serves static resource content from .jar files such as spring-faces.jar -->
<servlet>
<servlet-name>Resource Servlet</servlet-name>
<servlet-class>org.springframework.js.resource.ResourceServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<!-- Map all /resources requests to the Resource Servlet for handling -->
<servlet-mapping>
<servlet-name>Resource Servlet</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
For optimal page-loading performance use the Spring Faces
components includeStyles and includeScripts.
These components will eagerly load the necessary CSS stylesheets and
JavaScript files at the position they are placed in your JSF view
template. In accordance with the recommendations of the Yahoo
Performance Guildlines, these two tags should be placed in the
head section of any page that uses the Spring Faces
components. For example:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<f:view xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:sf="http://www.springframework.org/tags/faces"
contentType="text/html" encoding="UTF-8">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Hotel Booking Sample Application</title>
<sf:includeStyles />
<sf:includeScripts />
<ui:insert name="headIncludes"/>
</head>
...
</html>
</f:view>
This shows the opening of a typical Facelets XHTML layout template that uses these components to force the loading of the needed CSS and JavaScript resources at the ideal position.
The includeStyles component includes the necessary
resources for the Dojo widget theme. By default, it includes the
resources for the "tundra" theme. An alternate theme may be selected by
setting the optional "theme" and "themePath" attributes on the
includeStyles component. For example:
<sf:includeStyles themePath="/styles/" theme="foobar"/>
will try to load a CSS stylesheet at "/styles/foobar/foobar.css" using the Spring JavaScript ResourceServlet.