In komplexen JSF-Konfigurationen kann es passieren, dass man den Faces Context vor dem eigentlichen Aufruf des Faces Servlets braucht. Zum Beispiel um Faces Messages in Spring Security oder anderen Servlet Filtern zu erzeugen.

In diesem Fall kann der Faces Filter vor den betroffenen Filtern gesetzt werden. Die anderen Filter zwischen dem Faces Filter und dem Faces Servlet können dann auf den Faces Context zugreifen:

Faces Filter ist Bestandteil von JSF Ext und durch das Intersult Maven Repository zu beziehen.

Beispiel#

Folgende Beispielkonfiguration zeigt das Zusammenspiel unterschiedlicher Einträge in der web.xml:
	<filter>
		<filter-name>RequestContextFilter</filter-name>
		<filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
	        <async-supported>true</async-supported>
	</filter>
	<filter-mapping>
		<filter-name>RequestContextFilter</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
	</filter-mapping>

	<filter>
	    <filter-name>OpenEntityManagerInViewFilter</filter-name>
	    <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
	        <async-supported>true</async-supported>
	</filter>
	<filter-mapping>
	    <filter-name>OpenEntityManagerInViewFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<filter>
		<filter-name>Pretty Filter</filter-name>
		<filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class>
        <async-supported>true</async-supported>
	</filter>
	<filter-mapping>
		<filter-name>Pretty Filter</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>ERROR</dispatcher>
	</filter-mapping>
	
	<filter>
		<filter-name>Faces Filter</filter-name>
		<filter-class>com.intersult.jsf.FacesFilter</filter-class>
	        <async-supported>true</async-supported>
	</filter>
	<filter-mapping>
		<filter-name>Faces Filter</filter-name>
		<url-pattern>/faces/*</url-pattern>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>REQUEST</dispatcher>
	</filter-mapping>
	
	<filter>
		<filter-name>springSecurityFilterChain</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	        <async-supported>true</async-supported>
	</filter>
	<filter-mapping>
		<filter-name>springSecurityFilterChain</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>REQUEST</dispatcher>
	</filter-mapping>
	
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	        <async-supported>true</async-supported>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>/faces/*</url-pattern>
	</servlet-mapping>