Got it.  Here's the params I needed to send with the ajax request:

var clientTree = document.getElementById("jsf_tree_64").value;
        var clientState = document.getElementById("jsf_state_64").value;
        var viewId = document.getElementById("jsf_viewid").value;
        
        dojo.io.bind({
                url: url,
                load: function(type, data, evt){ 
treeTools.handleAjaxResponse(data) },
                mimetype: "text/xml",
                content: {  "ajaxTreeRequest": 
treeTools.getThisTreeId(clickedNode),
                                        "id": id,
                                        "name": name,
                                "provider": 
treeTools.getNodeDataProvider(clickedNode),
                                "jsf_tree_64": clientTree,
                                "jsf_state_64":clientState,
                                "jsf_viewid":viewId}
        });

Only took a day.  Thanks for pointing me in the right direction Simon.


Matt Tyson wrote:
> 
> Simon,
> 
> Here's where the problem arises.  This is an ajax request being handled in
> a phase listener.  I'm waiting till after the the restoreView phase, but
> with client-side, the request is 1) missing the state and 2) missing the
> viewRoot.  
> 
> So I can add the state information manually into the request, but I'm
> still not getting my state back, perhaps because of 2)?  
> 
> Any suggestions?
> 
> Thanks.
> 
> Matt
> 
> 
> Simon Kitching-3 wrote:
>> 
>> Matt Tyson wrote:
>>> Hello,
>>> 
>>> This works using server-side state saving:
>>> 
>>> UIViewRoot viewRoot =
>>> context.getApplication().getViewHandler().restoreView(context, viewId);
>>> 
>>> And then I can get the component I'm interested in.  The viewRoot has no
>>> children if its client-side state saving.  Do I need to manually restore
>>> the
>>> state?  If so, how do I do that - I've got the value from the
>>> "jsf_tree_64"
>>> field, but how do you convert it to a State object to give to the
>>> viewRoot.restoreState() method?
>> 
>> By coincidence, I've been going through the relevant MyFaces code today 
>> for an unrelated reason.
>> 
>> I would have thought the above code would work fine.
>> 
>> Application.getViewHandler should return an instance of 
>> JspViewHandlerImpl. This will then delegate to JspStateHandlerImpl which 
>> will check whether client or server state is used:
>> 
>> protected UIViewRoot restoreTreeStructure(FacesContext facesContext,
>>                                            String viewId,
>>                                            String renderKitId)
>> {
>>      UIViewRoot uiViewRoot;
>>      if (isSavingStateInClient(facesContext))
>>      {
>>          //reconstruct tree structure from request
>>          RenderKit rk = getRenderKitFactory().getRenderKit(
>>            facesContext, renderKitId);
>>          ResponseStateManager responseStateManager =
>>            rk.getResponseStateManager();
>>          Object treeStructure =
>>             responseStateManager.getTreeStructureToRestore(
>>              facesContext, viewId);
>>          ....
>>       }
>> 
>> ResponseStateManager should be an instance of HtmlResponseStateManager:
>> 
>>      public Object getTreeStructureToRestore(
>>        FacesContext facescontext, String viewId)
>>      {
>>          Map reqParamMap =
>>            facescontext.getExternalContext().
>>               getRequestParameterMap();
>>          Object param = reqParamMap.get(VIEWID_PARAM);
>>          if (param == null || !param.equals(viewId))
>>          {
>>              //no saved state or state of different viewId
>>              return null;
>>          }
>> 
>>          param = reqParamMap.get(TREE_PARAM);
>>          .....
>> 
>> 
>> So the tree structure required should be fetched from request property 
>> VIEWID_PARAM or TREE_PARAM automatically when restoreView is called on a 
>> JspStateHandlerImpl.
>> 
>> Regards,
>> 
>> Simon
>> 
>> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/resotring-state-tf2816777.html#a7863914
Sent from the MyFaces - Users mailing list archive at Nabble.com.

Reply via email to