Try it!

What you'll see is that if you open two tabs or windows and then start the Wizard in each one then they will get different conversations. This allows you, for example, to work on two orders at once.

If, however, you start the Wizard AND then open a new tab or window AND your browser preferences are set to open with the current URL AND the browser is not IE or Chrome, then they will share the conversation. I think this is reasonable because it's the preference you have set. To avoid it, I guess some javascript would be required to detect the situation in the new tab or window or perhaps to prevent new tab or window being started? But maybe that's going too far?

Geoff

On 14/01/2009, at 10:45 PM, Ville Virtanen wrote:


But still the wizard example requires session in some form and thus the same
conversation in two tabs scenario is not possible?

- Ville


Geoff Callender-2 wrote:

It would be great if Tapestry provided a really nice clear solution to
conversation state (and continuations), but in the meantime the
workarounds are actually not all that hard.  Have you looked at the 3
Wizard examples and the Conversations List at
http://jumpstart.doublenegative.com.au:8080/jumpstart/
 ?

One modification I'd like to make to the Wizards is to defer assigning
a conversation id until you're on your way from the first page to the
second page.

Howard's talking about somehow making 5.1 work with Spring WebFlow.
I'll follow that one with great interest, but I'll be wearing my
sceptics hat as I fear that the SWF medicine might be worse than the
problem it's trying to solve.

Here are some good discussions of the problem:


http://www.developertutorials.com/tutorials/java/develop-complex-web-applications-050422/page1.html
        http://rifers.org/blogs/gbevin/2005/4/11/continuations_continuations
        http://www.artima.com/forums/flat.jsp?forum=226&thread=197351

http://debasishg.blogspot.com/2006/07/spring-web-flow-declarative-web.html

Geoff

On 14/01/2009, at 5:25 PM, Kalle Korhonen wrote:

I don't know if there's a better thread for discussing page scope and
conversation (if you know other threads, please link them in) but
I'm just
doing research on this topic for supporting conversations in Trails.
Shortly, I'm hoping that it'd be possible to have a generic
implementation
for conversations by dictating that a conversation should always
happen on a
single "page" or url with asynchronous calls. From my point of view,
assuming that only the beginning of a conversation can be
bookmarkable and
that a conversation has one-to-one mapping with a url are reasonable
conventions and will greatly simplify the required logic (compared to
xml-based navigation flow configurations). These conversations could
also be
cleaned from session before the session expires and can have
individual
timeout values.

Regarding the problem with multiple pages that others have already
pointed
out, with or without using cookies the urls need to be different (so
the
page contexts can be kept separate). Typically when editing a single
object,
you don't even want to allow multiple windows and this can be easily
dealt
with cookies transparently to the user. The only good example of where
multi-window support is actually useful that I can come up with is
search
(say when you are trying to find the best flight to a destination).
There, I
wouldn't even like to necessary have a conversation identifier as
part of
the url, but as a parameter (e.g. /travelsearch?conversationId=123)
since
it's not meaningful to bookmark a url with a conversationId in it,
but T5
doesn't allow one to easily manipulate urls and the page context is
extremely handy way of making sure all subsequent action requests
(from the
same page) are participating in the same conversation. However, one
of the
issues with T5 I haven't been able to satisfactorily solve is
forcing a page
to use an additional context parameter. I've tried with returning
the same
page from onActivate then setting a conversation id in onPassivate,
which
works in principle but only if I persist the conversation id which
kind of
defies the point. Anybody happen to have a good, generic solution for automatically adding parameters to the activation context (so they are
visible in the url)? I'd be also interested to know if anybody has
thoughts
on these ideas or is further along in providing a generic
implementation for
conversations in T5.

Kalle


On Fri, Dec 12, 2008 at 11:00 AM, Daniel Jue <teamp...@gmail.com>
wrote:

In the past I manually implemented this behavior by mixing server
side and
client side persistence.  My code-fu was probably not very elegant.

In my case, a user could open a report page after filling out a
page of
variables.  These report pages would open in a new browser window/
tab. So
instantly you have the situation where two reports can be open but
use
different data.  I would store a client side string on each report
page,
and
LRU hash map on the ASO side would match it to the relative data,
just
before the report was run and a new page opened.  If it was in the
LRU, I
could grab the cached report.  If not, I still had enough
information to
run
the report again. If the report page needed to be refreshed (such as
sorting something on the page, non-async), the client side key
would look
up
the data.

I used a small LRU limit (like 5) to keep the size down.

Daniel

On Fri, Nov 28, 2008 at 10:18 PM, thermus <msch...@gmail.com> wrote:


I'm interested in this as well. Specifically if a user has two page
instances open, how can T5 persistence be used reliably?

I found on Safari and Firefox (not sure about IE, but likely a
problem
there
as well) that the persisted session properties are shared between
page
instances and each page can overwrite the another.  My searches
didn't
come
up with a definitive answer although I did see that the question
has been
asked several times.  Can anyone comment on this or provide a
workaround?



Peter Stavrinides wrote:

... but what would be ideal in my humble view is a proper page
persistence
Strategy, where a value is retained until the user leaves the
page. In
truth someone posted such a solution which used a cookie, and it
seemed
to
behave exactly as it should, nevertheless I am still against
relying on
a
cookie. I understand this may be difficult to implement due to
Tapestry's
inner workings, particularly the way pages are pooled, but since
conversational state covers some of this ground (the difference
being a
conversation is tied to not only the page, but the window so each
tab
is
treated as a new conversation)...


--
View this message in context:
http://www.nabble.com/Persistance-tp20732003p20743522.html
Sent from the Tapestry - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org





---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org




--
View this message in context: 
http://www.nabble.com/Persistance-tp20732003p21454462.html
Sent from the Tapestry - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to