First you must read
- Why does JSF need to save the state of UI components on the server side?
- What is STATE_SAVING_METHOD parameter in JSF 2.0?
To summarize answer to your question,
Client side:
Saving state on the client results in less of a load on the server at the expense of
additional network traffic. This is because by default, client side is stored as a large hidden
<input>
field in web browsers. Saving state on the client also works better in failover
situations because even if the server is down, the state won't be lost.
State saving at client side is having security concerns as well as overhead of serialization of entire JSF tree every time.