You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Pavitra Subramaniam (JIRA)" <de...@myfaces.apache.org> on 2010/01/12 04:40:54 UTC
[jira] Created: (TRINIDAD-1685) Repeat partial requests are treated
as postback, because of absent/removed client-side ViewState
Repeat partial requests are treated as postback, because of absent/removed client-side ViewState
------------------------------------------------------------------------------------------------
Key: TRINIDAD-1685
URL: https://issues.apache.org/jira/browse/TRINIDAD-1685
Project: MyFaces Trinidad
Issue Type: New Feature
Components: Components
Affects Versions: 2.0.0.1-core
Environment: Windows 7
Reporter: Pavitra Subramaniam
I noticed a change in JSF 2 related to sending the ViewState to the client and wanted to log this issue with my findings and propose possible solutions.
1. In JSF 1.2, the viewstate (either the client token or the full client-side state) was always sent as part of every request and this was happening in 2 places:
- In FormRenderer, as part of the _renderPostscriptElement method, a <span> element with the postscript Id is generated and inside it a placeholder ('marker') for the JSF state is set.
- Later at the end of renderView in ViewHandler, 'writeState()' gets called which retrieves the real state, replaces the 'marker' with this value. So that we get something like (for the token case),
<fragment>
<![CDATA[<span id="tr_j_id_jsp_323026082_2_Postscript">
<input type="hidden" name="javax.faces.ViewState" value="!1bja7345nw">
<input type="hidden" name="source"></span>]]>
</fragment>
2. In JSF 2.0, this appears to have changed. One, we have a new 'MultiViewHandler.java', whose writeState() method does not write any state if it's an 'ajax' request. Secondly, since we generate the postscript element for all requests (including PPR) in the FormRenderer, we end up sending something like this to the client,
<update>
<![CDATA[<span id="tr_j_id_jsp_323026082_2_Postscript">
<input type="hidden" name="source"></span>]]>
</update>
The above response (using the jsf.ajax.response handler), wipes out the ViewState stored in the client. So subsequent PPR requests end up not being treated as postbacks.
REMARKS:
a. It's not clear to me if it's ok for the ViewState (token or full) to not get sent for partial requests on the same view.
b. If a. is true, then do we need to revisit how we send ViewState (as part of the FormRenderer 'postscript' element)?
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.