On the other hand the RichFaces showcase running on GAE is still using server state saving and Mojarra. Why?

not true about state saving - it uses client side.

And the differences caused by:

client state saving set for all apps gae profiles because session scoped data not correctly replicated at GAE. And you could try the same without richfaces (just plain JSF 2 with ajax) and will see much problems there. We could not influence JSF-GAE compatibility problems.

Mojara used for showcase because current myFaces release has issue which breaks RF fileUpload and we do not want show it broken so awaiting MyFaces fix to update showcase profile.

Mojara 2.0.3 and not 2.0.4 used because 2.0.4 has more issues in general with GAE which causes ajax requests(including JSF 2 standard ajax to be broken)

But in general MyFaces is more stable at GAE environment so we added it as default for archetype so the users who will create new apps will play with more stable JSF impl with the only issue with fileUpload.

So really compatibility of JSF 2 and GAE really not in good shape and we need to play much with different issues with every new JSF 2 release and GAE sdk update when deploying our demos.

Great summary of the issues. I just wish I had read this summary a few weeks ago since I just struggled with the same issues and came to the same conclusions. I am still struggling with the ViewState expiration issue. All of my pages are JSF2 with Richfaces and multiple forms since I use a template for implementing different themes.

It seems that anytime an AJAX request is made the view state of the forms that are not effected by the ajax request can expire. Is there any fix to this issue other than updating all forms? I cannot go to a single form since that would have problems with data entry forms.