background image

Saving and Restoring State

<< The setProperties Method | Delegating Rendering to a Renderer >>
<< The setProperties Method | Delegating Rendering to a Renderer >>

Saving and Restoring State

this.action = action;
}
Saving and Restoring State
Because component classes implement StateHolder, they must implement the
saveState(FacesContext)
and restoreState(FacesContext, Object) methods to help the
JavaServer Faces implementation save and restore the state of components across multiple
requests.
To save a set of values, you must implement the saveState(FacesContext) method. This
method is called during the render response phase, during which the state of the response is
saved for processing on subsequent requests. Here is the method from MapComponent:
public Object saveState(FacesContext context) {
Object values[] = new Object[2];
values[0] = super.saveState(context);
values[1] = current;
return (values);
}
This method initializes an array, which will hold the saved state. It next saves all of the state
associated with MapComponent.
A component that implements StateHolder must also provide an implementation for
restoreState(FacesContext, Object)
, which restores the state of the component to that
saved with the saveState(FacesContext) method. The restoreState(FacesContext,
Object)
method is called during the restore view phase, during which the JavaServer Faces
implementation checks whether there is any state that was saved during the last render response
phase and needs to be restored in preparation for the next postback. Here is the
restoreState(FacesContext, Object)
method from MapComponent:
public void restoreState(FacesContext context, Object state) {
Object values[] = (Object[]) state;
super.restoreState(context, values[0]);
current = (String) values[1];
}
This method takes a FacesContext and an Object instance, representing the array that is
holding the state for the component. This method sets the component's properties to the values
saved in the Object array.
When you implement these methods in your component class, be sure to specify in the
deployment descriptor where you want the state to be saved: either client or server. If state is
saved on the client, the state of the entire view is rendered to a hidden field on the page.
Creating Custom Component Classes
The Java EE 5 Tutorial · September 2007
426