I want to provide user a jpa entity grid component, which will provide its own griddatasource and hide it to end user; user instead will provide an ejbql for the entity grid and the component will execute the ejbql, generate griddatasource, show results in grid. It's a good example of simplifying/enhancing an existing component.
On Fri, Feb 13, 2009 at 1:57 PM, Robert Zeigler <robe...@scazdl.org> wrote: > Depending on what you're trying to do, you may be able to accomplish what > you want with a mixin, and avoid having to duplicate any parameters at all. > On a project awhile back, for example, I wrote a "filter" mixin for grid so > any grid could have filtering applied to it just by adding the mixin. What > is it you're trying to do? > > Robert > > On Feb 13, 2009, at 2/1310:58 AM , Yunhua Sang wrote: > >> Hi guys, >> >> Thanks for all your input. I've decided to change my code to use >> composition instead of inheritance, though I still remain my opinion: >> it would be very nice too that inheritance is perfectly support in >> Tapestry. >> >> Now I am going to modify my code... one of my component is a sub-class >> of Grid, which has 20 parameters, I have to put near 20 inherit:xxx in >> parameters of @Component annotation, hope I won't typo any of them. ;) >> >> Thanks and have a nice weekend. >> Yunhua >> >> On Fri, Feb 13, 2009 at 12:27 AM, Robert Zeigler <robe...@scazdl.org> >> wrote: >>> >>> On Feb 12, 2009, at 2/126:55 PM , Howard Lewis Ship wrote: >>> >>>> On Thu, Feb 12, 2009 at 12:58 PM, Robert Zeigler <robe...@scazdl.org> >>>> wrote: >>>>> >>>>> 0) I don't usually extend components; I prefer building things based on >>>>> composition. That said: >>>>> >>>> >>>> Which is the point of Tapestry! >>> >>> Agreed! But our friend isn't using composition, he's using inheritance, >>> which tapestry also, technically, supports. >>> >>>> >>>>> 2) This will work iff your parent class also implements a "defaultName" >>>>> method that the subclass overrides. Just tried it to be sure. >>>>> >>>> >>>> That's an unintended behavior. >>>> >>> >>> It may be, although I'm not sure why that should be. Consider: >>> >>> public class Parent { >>> >>> @Parameter("prop:defaultName") >>> private String name; >>> >>> public String getDefaultName() { >>> return "parentdefaultname"; >>> } >>> >>> } >>> >>> public class Child extends Parent { >>> >>> @Override >>> public String getDefaultName() { >>> return "childdefaultname"; >>> } >>> >>> } >>> >>> I would fully expect this to work; we specified the property to use that >>> supplies the default value, and we override that in the child. I would >>> be >>> annoyed if it didn't work. :) >>> Since the tapestry convention can be emulated as follows: >>> >>> @Parameter("prop:defaultName()") >>> >>> I don't see why the child overriding the parent's defaultName() method >>> working is "unintended". It /should/ work. :) >>> >>> >>>> >>>>> 3) You can provide getters and setters for the property. Promise. :) >>>>> But >>>>> the >>>>> question at stake is /when/ you can access the bound value for >>>>> supplying >>>>> a >>>>> default, and in that, you may be correct. >>>> >>>> Getter & setters will completey work. To the instrumented component, >>>> there's no difference between a getter/setter and any other >>>> (private) method that accesses the field. >>>> >>> >>> >>>>> >>>>> Robert >>>>> >>>>> On Feb 12, 2009, at 2/122:18 PM , Yunhua Sang wrote: >>>>> >>>>>> Hi Robert, >>>>>> >>>>>> 2) I tried your way, it doesn't work; it doesn't work even back to >>>>>> 5.0.18. >>>>>> 3) I don't think the get/set methods would work for parameters; look >>>>>> at ParameterWorker class, it's fairly complicated because of the >>>>>> implementation of the binding magic. >>>>>> >>>>>> Thanks, >>>>>> Richard >>>>>> >>>>>> >>>>>> On Thu, Feb 12, 2009 at 2:56 PM, Robert Zeigler <robe...@scazdl.org> >>>>>> wrote: >>>>>>> >>>>>>> 1) Since Child extends Parent, it already has a name @Parameter. >>>>>>> 2) If you want to provide the default in the child, you can always >>>>>>> provide >>>>>>> the "default" method: >>>>>>> String defaultName() { >>>>>>> return "Tom"; >>>>>>> } >>>>>>> 3) Otherwise, access in the child via code is mediated through normal >>>>>>> java >>>>>>> channels: create a public (or protected) getter and setter in the >>>>>>> Parent >>>>>>> class. >>>>>>> >>>>>>> Robert >>>>>>> >>>>>>> On Feb 12, 2009, at 2/1212:45 PM , Yunhua Sang wrote: >>>>>>> >>>>>>>> Hi Howard, >>>>>>>> >>>>>>>> Can you show me in a child component, how to access a parameter >>>>>>>> defined in parent by using another way? I cannot find api which >>>>>>>> isn't >>>>>>>> internal about it. By the way, seems it's also diffcult to provide >>>>>>>> default binding for a parameter within parent because function >>>>>>>> bindParameter(String parameterName, Binding binding) is internal as >>>>>>>> well. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Yunhua >>>>>>>> >>>>>>>> On Thu, Feb 12, 2009 at 11:10 AM, Howard Lewis Ship >>>>>>>> <hls...@gmail.com> >>>>>>>> wrote: >>>>>>>>> >>>>>>>>> It looks to me like theres an ambiguity here: I don't think a child >>>>>>>>> component should be allowed to declare a second parameter, "name" >>>>>>>>> in >>>>>>>>> this example, that is already defined in a super-class. >>>>>>>>> >>>>>>>>> On Wed, Feb 11, 2009 at 12:20 PM, Yunhua Sang >>>>>>>>> <yunhua.s...@gmail.com> >>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> Hello Howard, >>>>>>>>>> >>>>>>>>>> It turns out the error occurs only when the child wants to provide >>>>>>>>>> its >>>>>>>>>> own default binding for a parameter originally defined in parent; >>>>>>>>>> example: >>>>>>>>>> >>>>>>>>>> public class Parent { >>>>>>>>>> @Parameter >>>>>>>>>> private String name; >>>>>>>>>> void setupRender() { >>>>>>>>>> name.toUpperCase(); // NPE happens here >>>>>>>>>> } >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> public class Child extends Parent{ >>>>>>>>>> @Parameter("prop:name") >>>>>>>>>> private String name; >>>>>>>>>> public String getName() { >>>>>>>>>> return "Tom"; >>>>>>>>>> } >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> Page class: >>>>>>>>>> public class ChildExample { >>>>>>>>>> @Component >>>>>>>>>> private Child child; >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> Template ChildExample.tml: >>>>>>>>>> <html >>>>>>>>>> xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd"> >>>>>>>>>> <h3>Test</h3> >>>>>>>>>> <t:child t:id="child"/> >>>>>>>>>> </html> >>>>>>>>>> >>>>>>>>>> I am sorry for my previous inaccurate information and thanks for >>>>>>>>>> looking into it. >>>>>>>>>> >>>>>>>>>> Yunhua >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Wed, Feb 11, 2009 at 2:15 PM, Howard Lewis Ship >>>>>>>>>> <hls...@gmail.com> >>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> I'm not aware of anything that's changed in this area; could you >>>>>>>>>>> elaborate? >>>>>>>>>>> >>>>>>>>>>> On Wed, Feb 11, 2009 at 10:56 AM, Yunhua Sang >>>>>>>>>>> <yunhua.s...@gmail.com> >>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>> Hello all, >>>>>>>>>>>> >>>>>>>>>>>> It seems there is no clear document about how to access a >>>>>>>>>>>> parameter >>>>>>>>>>>> defined in parent component; previous to 5.0.18, I was using the >>>>>>>>>>>> way >>>>>>>>>>>> of declaring the parameter again in child class and it worked >>>>>>>>>>>> well; >>>>>>>>>>>> however looks like some changes in 5.1.0.0 broke the way, seems >>>>>>>>>>>> there >>>>>>>>>>>> is no link between the parameter with same name in parent and >>>>>>>>>>>> child >>>>>>>>>>>> now. >>>>>>>>>>>> >>>>>>>>>>>> The problem is when I am USING a tapestry component, it's such a >>>>>>>>>>>> comfortable experience; but when I write a sub-class of a >>>>>>>>>>>> component, >>>>>>>>>>>> I >>>>>>>>>>>> am getting frustrated: a lot of methods are package visible; >>>>>>>>>>>> there >>>>>>>>>>>> is >>>>>>>>>>>> no clear way for parameter manipulation, a typical question: can >>>>>>>>>>>> I >>>>>>>>>>>> update an attibute of parameter in parent class? If inheritance >>>>>>>>>>>> is >>>>>>>>>>>> not >>>>>>>>>>>> a good practice in Tapestry, there should be a document about >>>>>>>>>>>> it. >>>>>>>>>>>> >>>>>>>>>>>> Thanks in advance for any help, >>>>>>>>>>>> Yunhua >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> --------------------------------------------------------------------- >>>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>>>>>>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> Howard M. Lewis Ship >>>>>>>>>>> >>>>>>>>>>> Creator Apache Tapestry and Apache HiveMind >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> --------------------------------------------------------------------- >>>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>>>>>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> --------------------------------------------------------------------- >>>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>>>>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Howard M. Lewis Ship >>>>>>>>> >>>>>>>>> Creator Apache Tapestry and Apache HiveMind >>>>>>>>> >>>>>>>>> >>>>>>>>> --------------------------------------------------------------------- >>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>>>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> --------------------------------------------------------------------- >>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>>>>> >>>>>>> >>>>>>> --------------------------------------------------------------------- >>>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>>>>> >>>>>>> >>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>>> >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>>> >>>>> >>>> >>>> >>>> >>>> -- >>>> Howard M. Lewis Ship >>>> >>>> Creator Apache Tapestry and Apache HiveMind >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>> For additional commands, e-mail: users-h...@tapestry.apache.org >>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >> For additional commands, e-mail: users-h...@tapestry.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org