tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Leonardo Quijano Vincenzi <leona...@dtqsoftware.com>
Subject Re: [jira] Created: (TAPESTRY-733) Tapestry should call listeners (such as PageBeginRenderListener) in some predefined order
Date Tue, 01 Nov 2005 18:19:11 GMT
Just how would you make it lazy??

My scenario: a domain-driven approach to web development. I have several 
domain classes, such as Client, Phone, Address, etc. For example, the 
Client class would have something like this:


-> String firstName
-> String lastName
-> List<Phone> phones
-> Address address


I then go and create a FormClient.html Tapestry component with something 
like this:

<span jwcid="@FieldLabel" displayName="First Name" /><span 
jwcid="@TextField" value="ognl:value.firstName" />
<span jwcid="@FieldLabel" displayName="Last Name" /><span 
jwcid="@TextField" value="ognl:value.lastName" />

<span jwcid="@For" source="ognl:value.phones" value="ognl:phone">
   <span jwcid="@forms/FormPhone" value="ognl:phone" />

<span jwcid="@forms/FormAddress" value="ognl:value.address" />

As you see, I'm binding the subcomponents (FormPhone, FormAddress) with 
the Client object directly. Then on rewind I have to do nothing: the 
address is automatically assigned to value.address and so forth (the 
list of phones is a special case, but similar).

Now, the graph can get pretty complex, so I initialize every FormXXX 
component's value (in case it's null) in pageBeginRender. But, for this 
to work, the parent component must be already initialized, because, if I 
try to do a setValue() on "value.address", it throws an NPE when and 
value is null (since the parent hasn't been initialized yet).

Summary: It's just a case of component composition. It's like using 
constructors. The object's fields constructors are called after the 
parent one.
It's intuitive to assume events are fired in order [parent -> child]. At 
least it took me a while to figure out what was going wrong.

Ing. Leonardo Quijano Vincenzi
Director T├ęcnico
DTQ Software

Ron Piterman wrote:
> I Usually avoid this kind of initialization by making it happen lazy,
> If you would share the scenario... maybe there is a nice solution...
> Cheers,
> Ron

To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org

View raw message