I don't really understand why having custom links in these pages is that big of a deal. Each page is going to have to have some sort of unique identifier anyway - and putting it on a custom link and handling that with a custom service shouldn't be too difficult. It will be a bit of work, though, as you'll have to ensure that all links rendered are done so using your custom link component - you may need to use a decorator pattern so that you can decorate different types of links.

        Erik

On Apr 5, 2005, at 3:16 AM, <[EMAIL PROTECTED]> wrote:

Well, as i see, there is no simple solution to this problem :-( The possible one to reconstruct any links in the rendered page is a very rough one, i think. To implement a page persistency and associate the data object in dependence on a cookie value seems to be smarter - if it works.

But i think, the simpliest and smartest way would be, if i would hustle our customer to drop this requirement ;-)

Just kidding ;-)

I'll have a look on both of your suggestions, and would appreciate other ones. Thank you very much so far.

best,

Rene

"Tapestry users" <tapestry-user@jakarta.apache.org> schrieb am 04.04.05 21:16:33:


This problem reminds me of an article, "The Law of Leaky Abstractions":
http://www.joelonsoftware.com/articles/LeakyAbstractions.html


The obvious answer is
1) Don't keep any state server-side (ie. Visit/HttpSession), possibly
this could be overriding tapestry persistence mechanism to use cookies.


The problem is that your HttpSession is going to be associated with the
all browser instances (at least across browser type, say IE), so you
can't transparently handle state server-side. You can possibly get close
if you figure out how to associate a specific different Visit with each
specific browser window (possibly using techniques as below), but what
about things like "login"?


2) If you don't want the same login information across these windows,
you are OK (assuming you can pull off the visit/browser window trick,
remember you can't store the window instance descriptor itself in the
session). I think generally, you would store Visits within the
HttpSession, keyed by some cookied value that describes the window that
you are communicating with (with one possibly being a "default").


3) If you want some common information across these windows, then you
have a custom solution, and probably want to support another persistence
"style" in a generic way (ie. page, _window_, session), again using a
solution like as in 2). Maybe you clone the window information when they
have a new window, it depends I suppose. I'm not sure how you support
the new persistence type either, but that's what you would have.


Joel

-----Original Message-----
From: Anatoli Krassavine [mailto:[EMAIL PROTECTED]
Sent: Monday, April 04, 2005 9:58 AM
To: Tapestry users
Subject: Re: How to handle multiple instances of a page with different
data in the same session, at the same time ?

  Hello Erik,

  Correct me if I am wrong, but it seems to me that
this is not enough for what Rene needs (and what I
needed).
  I am very happy to be proven wrong on this subject -
will save me lots of hassle, so let me describe a
scenario.

  Basically, imagine that I have a page with good deep
component hierarchy. Say 100 links encoded at
different levels of hierarchy including generic
components.

  I want to have several such pages opened in
different browser windows by the same user (i.e.
within same user session as far as Tapestry is
concerned), each with its own separate workflow.

  Simple example (yes, I know it is very artificial,
so please do not flak me on this):

1) client runs 3 searches with different queries
2) each search opens a new window with separate
hitlist
3) in each window we have different pagination, sort
options, et cetera, et cetera
4) client wants to be able to switch between windows
seemlessly maintaining the context within each window
5) specifically generic links encoded within generic
components must maintain the page context

  Cheers,
   Toly

--- Erik Hatcher <[EMAIL PROTECTED]> wrote:
I don't know how this would be accomplished in the
cleanest way, but in
Tapestry 3.1 (errr, "Picaso") the property
persistence is pluggable
with a builtin capability of persist="session".  I
suppose clever links
and services could key off of properties marked as
persist="page" such
that links were encoded with those properties
automatically (but you
wouldn't want all links encoded this way probably)
and that they'd be
extracted and re-set on each request by the service.

What would it take to do this type of thing?

        Erik


On Apr 4, 2005, at 6:46 AM, Anatoli Krassavine wrote:
3) There are several approaches to this, but the
only
generic one is to encode "window" information in
links. Other approaches include creative handling
of
cookies and javascript, but they are tricky and
provide poor cross-platform compatibility.

4) The whole point of Tapestry is a complete
abstraction of HTML representation from actual
HTTP
workflows, hence link encoding should be done
transparently and cover ALL links on all
participating
pages.

5) The best way to achieve this is to provide a
wrapper service. This service will wrap standard
services (Action, Direct, etc).

When generating a representation of HTML link:
a) extract context information fro mthe current
page
instance
b) encode relevant information into the link by
appending an extra parameter (at the end)
c) then pass control to wrapped service to
generate
link in a "normal" way

When processing the request:
a) extract information from the link
b) store it in requestCycle as an attribute
c) pass control to wrapped service.
d) page instance could check the attribute in
requestCycle and act accordingly

I think it cover it all and works quite well.

Cheers,
 Toly

[EMAIL PROTECTED]
Software Architect

--- [EMAIL PROTECTED] wrote:
Hi @all,

in my current project, i have to ensure, that a
user
can work with
multiple instances of the same page, but every
page
instance has different data.
Means, that he can open multiple windows with the
same page. With a
plain page, this should be no problem, but in
this
case, the page
contains a TabPanel, which, as we all know,
forces a
page reload in
case of changing the current tab page. In other
cases, it is necessary
to reload the page with a "location.href" refresh
in
javascript, without
a form submit.

The problem is:
if the user opens the page to display data object
A,
after that opens
another instance of the same page with data
object
B, goes back to A
and does something with this instance (i.e.
forcing
a page reload or
changing the tab page), the data of object B is
displayed in page A, because it was the
last data object bound to this tapestry page.

Hope, you can understand, what i mean.

How can i handle this ?

best,

Rene



______________________________________________________________
Verschicken Sie romantische, coole und witzige
Bilder per SMS!
Jetzt bei WEB.DE FreeMail:
http://f.web.de/?mc=021193





---------------------------------------------------------------------
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]



Send instant messages to your online friends http://uk.messenger.yahoo.com



---------------------------------------------------------------------
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]



Send instant messages to your online friends http://uk.messenger.yahoo.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



______________________________________________________________
Verschicken Sie romantische, coole und witzige Bilder per SMS!
Jetzt bei WEB.DE FreeMail: http://f.web.de/?mc=021193


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to