Spring 3 and the JSF 2 View Scope
In addition to the existing JSF 1.x scopes – Request, Session, and Application, JSF 2 introduced two new scopes to the managed bean lifecycle.
This scope persists the state of request parameters in the FacesContext View Map until the current view being rendered is discarded. As long as a user is interacting with the current page, request parameter state is maintained.
First seen in the Ruby on Rails framework, this scope is for short lived conversations that only need to propagate parameters from one request to the next in the request processing lifecycle. Thereafter, the state of request parameters is discarded from the FacesContext View Map.
Implementing the JSF View Scope in Spring 3
Spring 3 supports the following bean scopes out-of-the-box:
- singleton – Scopes a single bean definition to a single object instance per Spring IoC container.
- prototype – Scopes a single bean definition to any number of object instances.
- request – Scopes a single bean definition to the lifecycle of a single HTTP request; that is, each HTTP request has its own instance of a bean created off the back of a single bean definition. Only valid in the context of a web-aware Spring ApplicationContext.
- session – Scopes a single bean definition to the lifecycle of an HTTP Session. Only valid in the context of a web-aware Spring ApplicationContext.
- globalSession – Scopes a single bean definition to the lifecycle of a global HTTP Session. Typically only valid when used in a portlet context. Only valid in the context of a web-aware Spring ApplicationContext.
In addition to the above scopes it is possible to create custom scopes. To support the JSF2 managed bean View Scope in the Spring Spring IoC container it is necessary to create a custom scope which implements the
org.springframework.beans.factory.config.Scopeinterface. Beans created using this interface should then be registered with the Spring Custom Scope Configurer.
Create the View Scope implementation
First, create the View Scope bean implementing the required logic for the
Register the View Scope implementation
To enable the View Scope implementation in your web application, register the custom Scope implementation in your application context.
If you specify
@Scope("view")in your managed bean and the JSF page is loaded, failure to register the custom scope bean in your Spring application context will result in an error similar to the following:
Create your JSF managed bean
The following class from a previous article on the JSF2 JSR-330 annotations has been updated to use the new View Scope in the
When the user loads the page bound to the above backing bean, request parameters entered in form fields will be persisted in the FacesContext View Map on form submissions until they navigate to another page in the application.
Support for the JSF 2 View Scope in Spring 3 can be realised by implementing a custom Scope and registering it as a bean in the Spring application context.
Key benefits provided by View Scope are persisting of request parameters across form submissions for the same page, thereby removing the need to manage request parameter state within the web application session.