Why store them in local variables? Store it in the current request cycle... First do a cycle.getAttribute("myexpensivevar") if that returns null, do the computations and store the result back cycle.setAttribute("myexpensivevar",obj);
See http://tapestry.apache.org/tapestry4/tapestry/apidocs/org/apache/tapestry/IRequestCycle.html Epstein, Ezra wrote: > OK, let's get to brass tacks. > > I have some derived values that are somewhat expensive to compute so I > compute them once per request/response cycle and then they're in local > instance variables (non-persisted). > > The particular component in question (with the semi-expensive derived values) > is used inside a loop and so may appear multiple times on a page. By default > the first time I use the component I compute the value and then display from > that computed value... The 2nd, 3rd, etc instance of those component on the > page is actually the exact same Java instance and so the computed/derived > ivar is still set. I've added a hack that records an original property value > when the derived ivar is computed and if the original and current property > values don't match I reset the derived ivar. It works, but it a total hack. > > The common way I'd imagine doing it is to listen to when the property > (parameter) is set by Tapestry. But now that I've lain out the use case > maybe some knows the "right" way to do this in Tapestry. > > > Thanks, > > Ezra Epstein > > > -----Original Message----- > From: Jesse Kuhnert [mailto:[EMAIL PROTECTED] > Sent: Monday, October 09, 2006 3:33 PM > To: Tapestry users > Subject: Re: How to observe property binding events > > There's also the org.apache.tapestry.event.ChangeObserver interface, though > this is currently only used by the services in tapestry.persist to observe > page property changes when they are being managed via a particular > persistence strategy. (like session/client/etc..) > > ~Maybe~ it's an oversight, and maybe not..I guess that depends on what/why > you are trying to do. You'll find that there is very little in the framework > that wasn't put there for an actual need, so adding in support for things > that no one has needed yet doesn't seem to fall in line with sound design. > (imho of course..) > > If you can outline why you need this, and exactly what properties/conditions > you'd want to observe we might be able to work something out...A general > "anything" is harder to understand / design around. > > There is no such thing as a "parameter" property listener because parameters > have no meaning in the context of something taking a parameter...There has to > be a source for that parameter value (usually a page ) somewhere. > > On 10/9/06, Epstein, Ezra <[EMAIL PROTECTED]> wrote: > >> Hi Jesse, >> >> Thanks for that reply. >> >> If I read it correctly, it sounds, simply, like the framework is >> missing this feature. It's a pretty common thing to ask for listener >> call-backs on framework events. ("Listener" here in the generic sense >> rather than the way tapestry uses the term for direct-link targets.) >> In short, this sounds like a design over-sight. It's common when >> beans are bound to be able to receive a call-back -- Hibernate, for >> example, offers this. So much of Tapestry seems "automagic" I'm >> surprised that there's no way to register to be informed of the events as >> they occur. >> >> If Howard's reading this perhaps he has a better perspective that he >> may offer. >> >> Thanks, >> >> Ezra Epstein >> Amazon.com - Developer Tools >> 206-266-2259 >> >> >> -----Original Message----- >> From: Jesse Kuhnert [mailto:[EMAIL PROTECTED] >> Sent: Friday, October 06, 2006 7:22 PM >> To: Tapestry users >> Subject: Re: How to observe property binding events >> >> Yes, but the usefulness of my answer largely depends on how >> clever/efficient you are trying to be doing it. >> >> Now, there is IBinding. The one object to bind them all ;) >> >> If you work your way down the type hierarchy you'll find >> AbstractBinding, which holds the method you care about most - >> "setObject". This will be called by tapestry when managing all of the page >> properties "automagically" >> for you. >> >> Some of the magic happens in (for your exact case at least) >> org.apache.tapestry.enhance.ParameterPropertyWorker. >> >> The other half of the work happens in each specific binding >> implementation that will handle these set/get object calls..(Like ognl >> bindings, etc..) >> >> I'm not sure where you are going with this but I guess you could use >> the hivemind chain of command service sort of configuration (like I >> did for org.apache.tapestry.services.ComponentRenderWorker ) to >> generically call a single interface method for a hivemind >> configuration point...Then you can contribute as many workers into the >> chain you like if you decide that you have more than one use for it. >> >> Again...Not knowing what you are doing - and taking the exact >> parameters given I'd probably extend and override the default >> ParameterPropertyWorker (a hivemind service, so replacing it inline >> with what Tapestry does already should be easy ) and just override >> whatever section of code I needed to in that implementation to inject + call >> my service reference. >> >> It may look a little complicated in there at first, but the whole >> org.apache.tapestry.enhance package is filled with lots of different >> enhancement works - and most of them inject a service into the object >> they work on...So finding an easier to follow worker to reference >> before modifying ParameterPropertyWorker might be easier. >> >> Hope that helps. >> >> On 10/6/06, Epstein, Ezra <[EMAIL PROTECTED]> wrote: >> >>> I've got a component which accepts a parameter. I want to listen >>> (receive a callback) when the parameter is set (bound). Does >>> Tapestry provide such a facility? >>> >>> Thanks, >>> >>> Ezra Epstein >>> >>> >>> >>> >>> >> -- >> Jesse Kuhnert >> Tapestry/Dojo/(and a dash of TestNG), team member/developer >> >> Open source based consulting work centered around >> dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> >> > > > -- > Jesse Kuhnert > Tapestry/Dojo/(and a dash of TestNG), team member/developer > > Open source based consulting work centered around > dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > > -- Andreas Andreou - [EMAIL PROTECTED] - http://andyhot.di.uoa.gr Tapestry / Tacos developer Open Source / J2EE Consulting --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]