I'll add to this and say that if you want sorting behavior, you can
implement Comparable and Comparator (I don't remember which you need - I
tend to implement both), and add "location" to your model.

IIRC, you will need to build your model in code to say that the "location"
column is sortable.


Jonathan


> -----Original Message-----
> From: Tobias Wehrum [mailto:[EMAIL PROTECTED]
> Sent: Friday, April 18, 2008 5:20 AM
> To: Tapestry users
> Subject: Re: T5: Is there a simple way to display property of embedded
> instance in Grid?
> 
> Hi DH,
> 
> it would be:
> 
> -----------------------------------------------------------------------
> <table t:type="grid" t:source="userSource" row="currentUser"
> add="location_city">
>     <t:parameter name="location_citycell">
>       ${currentUser.location.city}
>     </t:parameter>
> </table>
> -----------------------------------------------------------------------
> 
> (Note the "add" instead of include - you want to add something not already
> existing, not include something.)
> 
> On your page you have to define
> 
> -----------------------------------------------------------------------
> @Parameter
> User userSource;
> -----------------------------------------------------------------------
> 
> to keep track of the current grid object.
> So much for the first method.
> 
> 
> If you want to have to have a Location always represented as a String
> containing its city toString():
> 
> -----------------------------------------------------------------------
> class Location {
>       // [...]
>       public String toString() {
>               return city;
>       }
> }
> -----------------------------------------------------------------------
> 
> Now you have to define a Translator for Tapestry (I use a template for all
> classes which implement toString()):
> 
> -----------------------------------------------------------------------
> public class ModelTranslator<ModelClass> implements Translator<ModelClass>
> {
> 
>          public Class<ModelClass> getType() {
>              return null;
>          }
> 
>          public ModelClass parseClient(String arg0, Messages arg1)
>                  throws ValidationException {
>              throw new ValidationException("ModelTranslator cannot
> implement parseClient()");
>          }
> 
>          public String toClient(ModelClass arg0) {
>              return arg0.toString();
>          }
> 
> }
> -----------------------------------------------------------------------
> 
> Now you only have to announce your Translator in to your AppModule.java:
> 
> -----------------------------------------------------------------------
>     @SuppressWarnings("unchecked")
>     public static void
> contributeDefaultDataTypeAnalyzer(MappedConfiguration<Class, String>
> configuration) {
>       configuration.add(User.class, "user");
>     }
> 
>     @SuppressWarnings("unchecked") {
>       configuration.add("user", new ModelTranslator<User>());
>     }
> -----------------------------------------------------------------------
> 
> ...and after doing this, you have to do exactly *nothing* to add it to
> your grid - it will do so per default. :)
> 
> Tobias
> 
> 
> dhning schrieb:
> 
> > Hi, Tobias
> >
> > Thanks for reply.
> >
> > I am newbie of customizing grid component.
> > I guess what you mean like this?:
> > <table t:type="grid" t:source="userSource" include="location_city">
> >     <t:parameter name="location_cityheader">
> >     </t:parameter>
> >     <t:parameter name="location_citycell">
> >     </t:parameter>
> > </table>
> >
> > But exception message still exists: "Bean editor model for User does not
> contain a property named 'location_city'".
> >
> > Thanks!
> >
> > DH
> >
> >
> > ----- Original Message -----
> > From: "Tobias Wehrum" <[EMAIL PROTECTED]>
> > To: "Tapestry users" <users@tapestry.apache.org>
> > Sent: Friday, April 18, 2008 4:20 PM
> > Subject: Re: T5: Is there a simple way to display property of embedded
> instance in Grid?
> >
> >
> >
> >> Hi DH,
> >>
> >> you can teach Location a standard way to be outputted by overwriting
> the
> >> toString() function of Location.
> >>
> >> Now you can output the String returned by toString() simply by
> including
> >> "location".
> >>
> >> If you want to output different properties of Location and not in one
> >> cell, I think you will have to add location_city, location_street etc
> >> and implement <t:parameter> blocks for it.
> >>
> >> Hope that helps,
> >> Tobias
> >>
> >> dhning schrieb:
> >>
> >>> Hi, All
> >>>
> >>> Case: A user own a location while the location is comprised of city,
> street...
> >>> public class User {
> >>>   private Location location;
> >>>   // setter & getter
> >>> }
> >>> public class Location {
> >>>   private String city;
> >>>  // setter & getter
> >>> }
> >>>
> >>> In the user list page, I want to display the city as one column in
> Grid.
> >>> But it doesn't work like this <table t:type="grid"
> t:source="userSource" include="location.city"></table>.
> >>> The exception message is "User does not contain a property named
> 'location.city'".
> >>>
> >>> Is there a simple way to implement such function?
> >>>
> >>> Thanks in advance.
> >>> DH
> >>>
> >> ---------------------------------------------------------------------
> >> 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