Yep, the old horse of page validation is still alive!
Last year there was a lot of discussion about fixing IPage.validate(). But
I'm not sure we ever firmly arrived at a consensus solution, and it appears
that validate() still works the same way in 2.3. So I would like to try to
stimulate an improvement for 2.4.
In summary: IPage.validate() is automatically called by any of the page
oriented services (Direct, Action, Page, External, Home, Reset). So when
Tapestry is handling the page navigation for you, at this high level, you
are guaranteed to have your method invoked. However, it's quite common for
developers to come up with more sophisticated navigation schemes that
require effecting page transitions with calls to cycle.setPage(), which
bypasses the validation mechanism. So there is a "mismatch"-- sometimes
validate() gets called and sometimes it doesn't. Worse still, tapestry
newbies are unlikely to realize this and wonder why their validation schemes
don't work (which is what happened to me originally).
I know that a *lot* of people have encountered this problem and rolled their
own solutions. Can we come up with a consensus for how it should work and
then get the new design in 2.4?
Mindbridge had a very sensible sounding suggestion, namely:
One approach to resolve these issues that we use here locally is to add the
method
activate() to the pages and invoke it instead of calling setPage():
page.activate(cycle);
A possible implementation could be something like this:
public void activate(IRequestCycle cycle) throws RequestCycleException
{
try {
this.validate(cycle);
cycle.setPage(this);
}
catch (PageRedirectException e) {
IPage page = cycle.getPage(e.getTargetPageName());
page.activate(cycle);
}
}
This looks like a pretty good solution, and I'm using it now. The only
weakness I can see is that activate() will not get called by the page
oriented services, and so if you rely on activate for something other than
validation (via overriding, let's say), you are hosed. One solution to that
problem would be to modify the implementations of the page services to use
activate().
thoughts?
Joseph Panico
[EMAIL PROTECTED]
_________________________________________________________________
Help STOP SPAM: Try the new MSN 8 and get 2 months FREE*
http://join.msn.com/?page=features/junkmail
-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
Tapestry-developer mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/tapestry-developer
- Re: [Tapestry-developer] page validation Joseph Panico
- Re: [Tapestry-developer] page validation Joseph Panico
