Thanks Geoff, but no, it doesn't. Your example shows how the Select component works as is. What I need is a smarter interpretation of BlankOption.AUTO. Basically, if you look at the showBlankOption() method in the Select class, you see this:
switch (blankOption) { case ALWAYS: return true; case NEVER: return false; default: return !isRequired(); } What I want is this: switch (blankOption) { case ALWAYS: return true; case NEVER: return false; // AUTO: Decide based on model size, current value, and required or not. default: List<OptionModel> options = model.getOptions(); if (options.size() == 1) { return !isRequired(); } if (options.size() == 0 || value == null) { return true; } if (value != null) { for (OptionModel option: options) { if (option.getValue().equals( value )) { return !isRequired(); } } } return true; } I hope it's clear what I want to achieve with the enhanced logic for AUTO. Regards, Benny On Thu, May 13, 2010 at 10:29 AM, Geoff Callender < geoff.callender.jumpst...@gmail.com> wrote: > Does this help at all? > > > http://jumpstart.doublenegative.com.au/jumpstart/examples/select/varied/$N/$N/$N/$N > > Cheers, > > Geoff > > On 14/05/2010, at 12:11 AM, Benny Law wrote: > > > We are talking about subclassing a Tapestry component here. To give you > an > > example, I wanted to subclass the Select component to override how > > BlankOption.AUTO is interpreted. I wanted the logic to not just look at > the > > required property but also to consider how many options are available and > > whether there is a current value. (I find the current logic lacking > because, > > for example, the first option will always be selected as default if > required > > is true, but there may not be a meaningful default for the field.) All I > > needed to do was to override the showBlankOption() method, but I couldn't > > because it's a private method. I ended up making a duplicate of the > Select > > component with a modified showBlankOption() method. It just didn't feel > > right. I don't think all this talk about capturing common logic in a base > > class or creating a service for it applies here. > > > > In my opinion, a good framework should provide the option for extending > its > > components easily. I believe that with proper design and careful > > consideration, inheritance can still be very useful. Developers should > > understand any potential risks involved in subclassing, but closing the > door > > to subclassing for the sake of backward-compatibility may be an overkill > > IMHO. Everything has pros and cons, and the developer is ultimately > > responsible for weighing them and choosing what's best for their > situation. > > > > BTW, if anyone can think of a clean way to solve my problem with the > Select > > component, please let me know. Thanks. > > > > Benny > >