I'd have to dig into the code to be sure I understood all points but I don't
think addPageBeginRenderListener is called by user code most of the time. ..

If you page implements one of the various Listener classes (like umm...
PageBeginRenderListener) - the framework will detect it and perform the
necessary registrations for you automatically when it enhances the page
class the first time.

On 10/10/06, Epstein, Ezra <[EMAIL PROTECTED]> wrote:

The common idiom for listener registration (Swing, Java Beans, etc.) is
that the remove() method returns the listener and the add() method only adds
a listener if it's not already listening.  Tapestry's impl follows neither
of these approaches.  Is there a reason for the naïve implementation of the
methods like

void addPageBeginRenderListener(PageBeginRenderListener listener)

?  A LinkedHashSet() would give the ordering of the current ArrayList
implementation plus the uniquing properties of a set...

Thanks,

Ezra Epstein
Amazon.com - Developer Tools
206-266-2259


-----Original Message-----
From: Jesse Kuhnert [mailto:[EMAIL PROTECTED]
Sent: Tuesday, October 10, 2006 1:09 PM
To: Tapestry users
Subject: Re: How to observe property binding events

I'm not sure what the requirements are wrt properties and specific users.

I've done similar things on a "per request" basis via doing something
like:

public abstract int getProp();
public abstract void setProp(int value);

public int getComplicatedValue()
{
  if(getProp() == -1) {
     // do something complicated
    setProp(newVal);
  }

return getProp();
}

The idea being that the heavy operation will only happen once for that
request/response cycle.

This all changes if you want it to be done for "all users" ? You can do
that as well I suppose but I think I probably need more clarification on who
the properties are supposed to be exposed to/etc..

On 10/10/06, Epstein, Ezra <[EMAIL PROTECTED]> wrote:
>
> That's the opposite of the functionality I want.  These are not PER
> request.  They are per instance of a component.  Thus true instance
> variables are the way to go. Tapestry recycles Components and it seems
> that within a request the same component is re-used but not cleared
> (ivars reset) even though it is re-parametrized.  So, I don't think
> request vars would work.
>
> Thanks,
>
> Ezra Epstein
> Amazon.com - Developer Tools
> 206-266-2259
>
>
> -----Original Message-----
> From: andyhot [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, October 10, 2006 12:35 AM
> To: Tapestry users
> Subject: Re: How to observe property binding events
>
> 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/tapes
> try/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]
>
> ---------------------------------------------------------------------
> 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]




--
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

Reply via email to