The following blog articles are part of the JSF State Saving series
To facilitate component developers a convenience API was introduced to make it easier to implement the state saving requirements. Access to this API is made available through UIComponent.getStateHelper().
The API defines the following methods:
void add(Serializable key, Object value) Object eval(Serializable key) Object eval(Serializable key, Object defaultValue)
The definition of a PartialStateHolder according to the PartialStateHolder interface:
The definition of a StateHolder according to the StateHolder interface:
void restoreState(FacesContext context, Object state)
Object saveState(FacesContext context)
void setTransient(boolean newTransient)
Each of the methods mentioned above have a particular role to fulfill during the JSF lifecycle.
Since state saving happens as part of the JSF lifecycle a component, validator, converter, etcetera that wants to participate in state saving can do so by implementing or using one or all of the below mentioned APIs.
During the JSF lifecycle state will be restored at the beginning of a request (if any state is available) and state will be saved at the end of a request (if any state is available).
Why is it important to know what happens during request processing? Well, if you know how JSF state saving works you can optimize your application to perform better.
The following blog articles are part of the JSF Converter series
In the previous blog entry you learned how to write your own converter. Say you want to distribute this converter to others. How can you make sure the JSF runtime knows about the converter without needing to add it to the faces-config.xml of the web application.
Writing you own converter is a pretty straight forward process. It really comes down to implementing the Converter API.
Say you want to write a converter that will convert colors. Lets assume we support, "Red", "Green" and "Blue".
How would you use the JSF DateTimeConverter?
If you are working with dates you probably have had a need to display them in the correct format, or even had to parse them? Well, lets start off with using dateStyle. The example below will use the "long" date style as defined by the server Locale. Valid values are "default", "short", "medium", "long", and "full".