Another side note while thinking about it, WebBeans early draft has been
released and contains a conversation scope:
http://jcp.org/en/jsr/detail?id=299


Regards,

~ Simon

On 11/7/07, Simon Lessard <[EMAIL PROTECTED]> wrote:
>
> Hi Simon,
>
> pageFlowScope includes back button and multiple tabs/windows support as
> well. The main disadvantages with it is that it make shallow copies between
> request, meaning you have to put the raw data directly in it, else the
> backup to previous version won't work correctly upon back button usage. I
> also dislike the EL using pageFlowScope. In project, we use a home made
> extension that fix both of those issues but has some drawbacks:
>
>    1. Create an annotation @PageFlowBean to mark the classes to be used
>    as page flow beans;
>    2. Create a PageFlowBeanHandler with three methods: clear, get,
>    persist and register;
>    3. Create a PageFlowBeanELResolver calling handler.get, if null
>    delegating to the default resolver chain, if the found bean is marked
>    @PageFlowBean, call handler.register, this remove the need of
>    #{pageFlowScope.}, note that the scope still has to be cleared manually;
>    4. Create a Decorator ApplicationFactory that set the base
>    ELResolver as PageFlowBeanELResolver with a delegate to default ELResolver
>    chain (why did it have to be so complicated to decorate resolver in JSF
>    1.2?);
>    5. Create a LifecycleFactory decorator to return a Lifecycle calling
>    handler.persist at the end of its render method. The persist method
>    save the serialized state of the pageFlow beans in the Trinidad
>    pageFlowScope to be correctly restored during the subsequent requests.
>
> The main drawback we're having with it is a performance overhaul linked to
> serialization as well as not enforcing the declared scope if the class is
> marked @PageFlowBean so the good practice is to define them as "none" or
> "request". We also had to add an attribute to the annotation to allow a bean
> name list filter so that you can have two beans of the same class, one in
> page flow scope and the other in any declared scope. Anyway, this was just
> to show you that it'S achievable using Trinidad as well.
>
>
> Regards,
>
> ~ Simon
>
> On 11/7/07, simon <[EMAIL PROTECTED]> wrote:
> >
> > Hi,
> >
> > I've been reading up on Trinidad Dialogs (including "pageFlow" feature),
> > and comparing them with Orchestra conversations.
> >
> > It seems to me that there is some overlap in features here. I'd
> > appreciate your help in getting a fair comparison together.
> >
> > I'm mostly looking at these three pages:
> >
> > http://myfaces.apache.org/trinidad/devguide/communicatingBetweenPages.html
> >
> > http://myfaces.apache.org/trinidad/devguide/dialogs.html
> >
> >
> > http://myfaces.apache.org/orchestra/myfaces-orchestra-core/conversation.html
> >
> > The orchestra docs give the following reasons for using conversations
> > instead of session-scope:
> > (1) at end of a flow, discard related beans to save memory
> > (2) at restart of flow, start with clean beans, not leftovers from
> > previous run
> > (3) support multiple concurrent windows there is also an undocumented
> > (because somewhat debatable) additional one:
> > (4) support "back" button by keeping snapshots of user data (either
> > client or server side).
> >
> > Trinidad pageFlow provides some kind of support for (1) and (2). However
> > views that are expected to be used in dialogs must use EL expressions
> > that reference pageFlow.*, ie must be written for it. The backing beans
> > for such screens are "normal" beans, and therefore are created directly
> > in their declared scope (request/session). Any non-request-scoped bean
> > will not be cleaned up on dialog end; only pageFlow is.
> >
> > So it seems to me that the correct way to use Trinidad dialogs is:
> > * always use request-scoped backing beans only
> > * EL expressions can read data from the pageFlow map, eg display
> > outputText. However they need to explicitly write "#{ pageFlow.foo}" to
> > get the data.
> > * EL expressions don't write to the pageFlow map; any input components
> > map to properties on the request-scoped bean. Of course those values get
> > lost after
> > render, but on postback the input components send that data back.
> > * If the backing bean wants to store any "computed" data, it must put()
> > it into the pageFlow map, and later read it back out again (with a
> > typecast). This map is probably best injected into it; the bean just
> > needs to know that this object can be used to externalise its state (if
> > any) into.
> >
> > Is this correct?
> >
> > In my experience, it's pretty hard to write a JSF app wth backing beans
> > that are only in request scope; I find myself using Session scope a lot
> > despite its drawbacks. Request-scoped beans are just too hard to use in
> > some circumstances.
> >
> > It seems to me therefore that Trinidad pageFlow (and the Dialog support
> > that is built on top of it) are really focused on page sequences a
> > couple of pages in length, where the pages don't do any clever or
> > complicated logic. Is this the general goal?
> >
> > And that converting an application that currently uses session-scoped
> > beans to using Trinidad dialogs extensively would be significant work?
> >
> > I guess one of the objects in the pageFlow could be effectively "the
> > real stateful backing bean", combining both logic and state into one
> > instance. However it would have to be explicitly put there by something
> > rather than allowing the VariableResolver to just create it in its
> > natural scope when an EL expression accessed it. And all accesses to it
> > would be clumsy as they either would have to be delegated via the
> > request-scoped bean, or the EL expression would need to use "pageFlow.*"
> >
> > again. So I presume this is not really a recommended approach?
> >
> > Re (3), the "page flow key" is kept as a URL param, so I guess that as
> > long as all the backing beans are request-scoped this would allow a user
> >
> > to have multiple windows open on the same or different dialogs. But it
> > will not work for any backing bean that is stateful itself.
> >
> > Re(4): snapshots of the pageFlow map can easily be made. This is
> > sufficient, however, only if the application uses only request-scoped
> > beans (no session-scoped beans at all).
> >
> > Note that I'm not trying to criticise pageFlow or Trinidad dialogs here,
> > just get an understanding of how they are expected to be used, and what
> > the pros/cons are.
> >
> > Regards,
> >
> > Simon
> >
> >
> >
> >
>

Reply via email to