Hi Simon,
many thanks for your tips. I checked the phase-listener solution, but
it's a little dirty.
The resource request skips phases 2-5. And the after RESTORE_VIEW
callback is not called.
In the before callback I do not know how to get the view id. As a
solution i check the source component of the phase event.
If it starts with org.ajax4jsf.resource.ResourceLifecycle I tell
orchestra to ignore the request.
It's not beautiful but it seems to work.
Bernd
Am 28.03.2008 um 14:11 schrieb simon:
Hi Bernd,
On Fri, 2008-03-28 at 12:11 +0100, Bernd Winterstein wrote:
Hi
I have a one page conversation with access-scope. The page contains
several tabs which are switched by Ajax calls.
The first time the page is loaded the last request is a css download,
upon which orchestra closes the conversation. The following requests
for other tabs works perfect, the conversations stays open.
Mrz 28 11:37:21 DEBUG
org
.apache.myfaces.orchestra.conversation.jsf.AccessScopePhaseListener
invalidateAccessScopedConversations Clearing access-scoped
conversation contactSearchController after rendering view /pages/
doctor_details.jsp
<-- THIS IS OKAY(old page)
Mrz 28 11:37:21 DEBUG
org
.apache.myfaces.orchestra.conversation.jsf.AccessScopePhaseListener
invalidateAccessScopedConversations Not clearing accessed
conversation doctorDetailsController after rendering view /pages/
doctor_details.jsp
<-- THIS IS OKAY(NEW PAGE, CONVERSATION SHOULD STAY OPEN)
Mrz 28 11:37:21 DEBUG
org
.apache.myfaces.orchestra.conversation.jsf.AccessScopePhaseListener
invalidateAccessScopedConversations Clearing access-scoped
conversation doctorDetailsController after rendering view /org/
richfaces/renderkit/html/css/basic_classes.xcss
<-- THIS IS WHAT I DON'T understand
You appear to have the suffix ".xcss" mapped to the FacesServlet, ie
that full facelets lifecycle (including phase listeners) is being run
when serving up that css file.
That's not usual; normally a css is a static resource, and is not
served by the FacesServlet. Therefore the jsf phase-listeners do not
run and this will not occur. I suppose it's some odd RichFaces
feature that requires a JSF lifecycle to serve a css file.
Orchestra's AccessScopeManagerConfiguration class can be configured
in spring to ignore specific view names:
<bean
name
=
"org
.apache
.myfaces.orchestra.conversation.AccessScopeManagerConfiguration"
class
=
"org
.apache
.myfaces.orchestra.conversation.AccessScopeManagerConfiguration"
scope="singleton">
... define set of views to ignore here ...
</bean>
However currently this supports only fixed view names, not patterns
like "*.xcss", so this doesn't help in your case.
The AccessScopePhaseListener does also ignore requests, however, if
AccessScopeManager.getInstance().setIgnoreRequest()
has been called. So I suggest that you add a phase-listener which
just checks the current view-id, and if it ends with ".xcss" then
set the ignoreRequest state on the AccessScopeManager. Note that
this is just a request-scoped object, so there is no need to "reset"
the state.
Regards,
Simon
See file spring-orchestra-init.xml within the orchestra jar for some
further details.
The AccessScopePhaseLinstener.
Hmm..
So for now, you probably need to subclass the AccessScopeManager
class itself,