That will do the job, of course.

br, Sven



2009/11/18 Gurkan Erdogdu <[email protected]>

> Understood the problem.
>
> WDYT to update  JSFConversationServiceImpl#getConversationId as follows
>
> //Look for UIViewRoot for postback requests
> if(JSFUtil.getConversationId == null)
> {
>      //Look for get requests
>     return
> JSFUtil.getExternalContext().getRequestParameterMap().get("cid");}
> }
>
>
> 2009/11/18 Sven Linstaedt <[email protected]>
>
> > Hi Gurkan,
> >
> > actually two instances needs to be restores: Conversation (request scoped
> > bean) and ConversationContext (hold as ThreadLocal).
> WebBeansPhaseListener
> > restores the last one. The Conversation is actually not set as a
> > ThreadLocal, but instead retrieved from the ConversationBean every time
> it
> > is requested, which itself relies on the ConversationService, which
> > implementation in turn relies on the cid being set on the ViewRoot.
> >
> > The problem with GET requests is, the ViewRoot is created for the
> requests
> > (without a cid being set of course), so the cid needs to be set on the
> > ViewRoot in order to be able to have the correct Conversation being
> looked
> > up during the request.
> >
> > br, Sven
> >
> >
> > 2009/11/18 Gurkan Erdogdu <[email protected]>
> >
> > > Hi;
> > >
> > > For GET requests, specification defines two ways
> > >
> > > 1* Redirect via JSF --> OWB handles --> Adding cid parameter to the
> URL.
> > > 2* Ordinary GET requests  --> You have to manage this scenario -->
> Adding
> > > "cid" manually to URL
> > >
> > > In second case, if URL contains "cid" then conversation is restored in
> > > WebBeansPhaseListener#AfterPhase#RESTORE_VIEW via
> > >
> > > String cid =
> > > JSFUtil.getExternalContext().getRequestParameterMap().get("cid");
> > >
> > >
> > > --Gurkan
> > >
> > > 2009/11/18 Sven Linstaedt (JIRA) <[email protected]>
> > >
> > > > CID during GET requests must be set on UIViewRoot earlier than before
> > > > render response
> > > >
> > > >
> > >
> >
> -------------------------------------------------------------------------------------
> > > >
> > > >                 Key: OWB-171
> > > >                 URL: https://issues.apache.org/jira/browse/OWB-171
> > > >             Project: OpenWebBeans
> > > >          Issue Type: Bug
> > > >          Components: Context and Scopes
> > > >            Reporter: Sven Linstaedt
> > > >            Assignee: Gurkan Erdogdu
> > > >
> > > >
> > > > The problem:
> > > >
> > > > GET requests in JSF2 can be handled by the full lifecycle, if the
> view
> > > > contains a <f:metadata/> with appropriate  <f:viewParam/> components.
> > > > Because no UIViewRoot is restored, but instead a new one is created,
> no
> > > cid
> > > > can be restored from the view root until WebBeansPhaseListener
> handles
> > > > before render rensponse.
> > > >
> > > > If one  requests the Conversation for injection during the lifecycle
> > > > ConversationBean.createInstance() is called, which should lookup the
> > > > conversation on the ConversationManager using the current sessionid
> and
> > > cid.
> > > > Both string based parameters are again looked up from the
> > > > ConversationService. Unfortunately
> > > ConversationService.getConversationId()
> > > > uses the ViewRoot's attributes map of current FacesContext to
> retrieve
> > > the
> > > > cid, which will be first set in the render phase. This results in a
> new
> > > > conversation being created.
> > > >
> > > > A possible solution would consists of setting the cid as early as the
> > > view
> > > > root is created in restore view.
> > > >
> > > > --
> > > > This message is automatically generated by JIRA.
> > > > -
> > > > You can reply to this email to add a comment to the issue online.
> > > >
> > > >
> > >
> > >
> > > --
> > > Gurkan Erdogdu
> > > http://gurkanerdogdu.blogspot.com
> > >
> >
>
>
>
> --
> Gurkan Erdogdu
> http://gurkanerdogdu.blogspot.com
>

Reply via email to