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.