JSF state is restored or used in “Restore View” of JSF life cycle. These state can be stored in 2 places:client and server. There are some links about the difference of them:
Some component such as Table can be very complex and has its own states such as the current page number and ordered column. If these states doesn’t be stored in component tree, we have to save them in hidden input field.
Myfaces even has a component t:saveState
This technology is powerful when user’s action is within one page. When page is refreshed, all he has done are saved. If he just jumps between page, navigate from one page to another page, then the state of a page is discarded, and more it is useless. In one page scenario, AJAX is also a good choice. They all improve user’s experience.
Somebody provides stateless approach.
There is a cool tool called FacesTrace to monitor JSF application. It displays not only session data, but also the whole JSF life cycle dynamically.