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]