Hi, thanks for answering!

I know how the request cycle works in tapestry. My problem occurs when I
want a listener to remove an item from a list, or when I want a listener to
add a radio button to the page, for example. The rewinding works fine, but
when the page renders after the rewind, the ordering and count of the
components on the page has changed, and the StaleLink appears.

1. Press the "delete" button on one item in a list of items (submits the
form)
2. Rewind starts
3. Reach the delete() listener in the page class
4. The delete() listener removes the selected item from the "items"
collection property of the page
5. Render starts
6. StaleLinkException (some component found when another one was expected).

I totally understand why this happens, but I don't understand how to avoid
it. A "throw new PageRedirectException(this)" from the listener during
rewind obviously solves the problem easily, but I don't want that, I don't
want to have to persist a lot of page state server side, which is pretty
much a necessity when using redirects during requests.

Another possible solution is to perform the actual deletion of the item
during render, and just prepare for the operation in the listener. But then
we move towards uglier code, and that's not the reason why I chose tapestry
for this project... :)

Inge

On 12/12/05, Ron Piterman <[EMAIL PROTECTED]> wrote:
>
> do the work in a listener that is called *after* the list is rendered,
> and you have no problem.
> The redirect has nothing to do with it - on submit, the page is rendered
> twice, first it rewinds, collecting all submit values, and then it
> renders normally, for the response sake, unless you activate another
> page during rewind, which then will be rendered instead of the form's
> page.
> Cheers,
> Ron
>
> Inge Solvoll wrote:
> > I have some cases where I need a new design pattern to avoid
> > StaleLinkException.
> >
> > 1. Render a list.
> > 2. Check a couple of items to be deleted.
> > 3. Submit form.
> > 4. Delete the checked items from the db on rewind
> > 5. Do a cycle.activate(this)
> > 6. The page renders, and a StaleLinkException occurs, because the
> component
> > count on the page has changed due to deletion of the items.
> >
> > This pattern used here is, as far as I can see, the pattern recommended
> by
> > Tapestry. But it doesn't work when you have to remove or add components
> > between page rewind and render in the same request. I don't see any
> other
> > solution than redirecting, which can be a good enogh solution for some
> > cases, but not for others.
> >
> > Our application is having more problems with back and refresh after
> porting
> > to tapestry, and we need to find a strategy for this.
> >
> > Are there any good pointers to articles on this, apart from the articles
> > recommending a redirect after post, to avoid browser back-button
> problems?
> >
> > Inge
> >
> > On 12/11/05, Ron Piterman <[EMAIL PROTECTED]> wrote:
> >
> >>The For component in 4.0 is deprecating the ForEach component. It is one
> >>of few components that were added. Also the If is deprecating the
> >>Conditional. Both components have much better Form functionality, to
> >>help and prevent just what you are facing.
> >>In Addition, Submit has two listeners now - one of them, called 'action'
> >>is deferred to just before the form listener is executed, and helps also
> >>to solve rewind issues.
> >>Also Form validation and values convertion is much better handled in 4.0
> .
> >>
> >>so - its not only annotations. In fact, annotations, thow hip, are the
> >>most unspectacular feature (imo) in 4.0.
> >>
> >>I wouldn"t start an application in 3.0 now - 4.0 is already for some
> >>time now satet of the art, and is going to go final, maybe already
> >>before new year...
> >>
> >>Cheers,
> >>Ron
> >>
> >>
> >>Vincent wrote:
> >>
> >>>Hi Ron,
> >>>
> >>>I know 4.0 add some new features in it (such as annontaion), but not
> >>
> >>components!
> >>
> >>>Quote ->
> >>>This component has been deprecated; Tapestry 4.0 adds the For
> >>>component which replaces Foreach and ListEdit components.
> >>><-
> >>>
> >>>Next time I first need to check the 4.0 document before.
> >>>
> >>>best regards,
> >>>Vincent
> >>>
> >>>On 12/11/05, Ron Piterman <[EMAIL PROTECTED]> wrote:
> >>>
> >>>
> >>>>Just another thing - if you can, use 4.0, where its much easier to
> avoid
> >>>>such exception with deferred listeners, and the migration of the
> T-Deli
> >>>>For into the tapestry framwork component library. (called action).
> >>>>Cheers,
> >>>>Ron
> >>>>
> >>>>Vincent wrote:
> >>>>
> >>>>
> >>>>>Hi all,
> >>>>>
> >>>>>I use foreach component in the table and IActionLink to submit the
> >>>>>click item in the table row(there is more than one submit method in
> >>>>>one form), but I found always got stale link exception.
> >>>>>
> >>>>>I tried use set stateful to false to avoid that exception in the form
> >>>>>component, also tried set stateful to false in  ActionLink , but
> seems
> >>>>>neither works.
> >>>>>
> >>>>>Then I thought may be it is possible to catch that exception my
> submit
> >>>>>method? Here is the following code, but it seems never went into the
> >>>>>catch before got following exception.
> >>>>>
> >>>>><pre>
> >>>>>You have clicked on a stale link.
> >>>>>
> >>>>>Rewind of form Home/$Form expected allocated id #2 to be '$Submit',
> >>>>>but was '$AnySubmit$0' (requested by component Home/$AnySubmit).
> >>>>>
> >>>>>This is most likely the result of using your browser's back button,
> >>>>>but can also be an application error.
> >>>>>
> >>>>>You may continue by returning to the application's home page.
> >>>>></pre>
> >>>>>
> >>>>><code>
> >>>>>                     try {
> >>>>>                     System.out.println("You have just clicked the
> row
> >>
> >>submit button");
> >>
> >>>>>             } catch (StaleLinkException e) {
> >>>>>                     System.out.println("catched stale link
> >>
> >>exception");
> >>
> >>>>>             }
> >>>>></code>
> >>>>>
> >>>>>So I want your opition how to avoid such annoying exception.
> >>>>>
> >>>>>best regards,
> >>>>>Vincent
> >>>>>
> >>>>>---------------------------------------------------------------------
> >>>>>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]
> >>>>
> >>>>
> >>>
> >>>
> >>>---------------------------------------------------------------------
> >>>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]
> >>
> >>
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to