myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Pavitra Subramaniam (JIRA)" <...@myfaces.apache.org>
Subject [jira] Created: (TRINIDAD-1685) Repeat partial requests are treated as postback, because of absent/removed client-side ViewState
Date Tue, 12 Jan 2010 03:40:54 GMT
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.


Mime
View raw message