The question is: how is this value
used? Is it used to validate the
values sent at submit, to ensure that
the same request is not sent twice?
The original reason why the viewstate exists is because HTTP is stateless. The state of the components across requests need to be maintained one way or the other. Either you store the state in memory on the server and bind it to the session, or serialize/deserialize it in the request/response each time.
AFAIK, the viewstate is not used to detect double submit, but it could if you attach a timestamp or something similar to it.
The viewstate can also be encrypted to make sure the client doesn’t alter it.
Also, how is it calculated – I realise
that richfaces may be calculated
differently from myfaces, but an idea
would be nice.
Each component is responsible to persist its state with saveState
and restoreState
(see this tutorial). So different component suites result in different view state. Similarly, different JSF implementations might result in different view state.