--- Sgarlata Matt <[EMAIL PROTECTED]> wrote: > I hope it's OK for a non-committer to start a vote. I know this has > been a > contentious issue, so I would like to clearly outline my plan for making > the > html taglibs more extensible and I would like a vote before I go to all > the > trouble of coding, updating documentation, resolving bugfixes, answering > questions, etc. > > DESIRED FUNCTIONALITY > The ability to cleanly extend the Struts tags. The tags are so good > that > when an application-specific requirement arises, it's much more > desirable to > extend from the Struts tag and keep tie-ins with ActionForms and such > than > it is to go off on your own. > > PROPOSED SOLUTION > The solution is two parts. Please vote separately for each part of the > solution. > A) Instead of accessing instance variables directly, use getters.
+1. I've done some checking on this in the past but another round is probably needed. > > <snip from="BaseFieldTag.java"> > if (accept != null) { > results.append(" accept=\""); > //old way > //results.append(accept); > //new way > results.append(getAccept()); > results.append("\""); > } > </snip> > > If someone wanted to override the accept attribute so that it was always > equal to foo then they would be able to do so. A better use case would > be > overriding the onclick method so that it does something special like > display > a calendar popup. Getters are actually already used in some places > (e.g. - > prepareMouseEvents in BaseHandlerTag), so really this is just doing an > audit > on the code to ensure getters are used consistently throughout the > taglib. > > Use case for Part A: > I built an implementation > of Matt Kruse's JavaScript calendar widget based on the Struts tags a > few > weeks before Matt made his own implementation, so I have some experience > doing this. As some brief background, the widget is a text box and a > corresponding calendar icon. When you click on the calendar icon a > popup > appears where you can choose the date. When you click on the text box > (which is what overrides a Struts tag) you want onfocus to automatically > call this.blur() so that the user can't enter text into the textbox > (that's > the calendar popup's job). So in my subclass it would be nice to > override > the getOnfocus() method instead of overriding the entire > renderIForgetWhatItIsCalled() method. Of course in this particular > instance > getOnfocus() is already being used instead of onfocus being accessed > directly, but I think this behavior should be consistent for all > attributes. > > B) Add a new renderExtraAttributes() method that gives people the chance > to > throw non-standard HTML into their tags that extend from Struts tags. -1. As I've stated previously, I don't think the Struts tags should support emitting non-standard HTML. David > > <snip from="BaseFieldTag.java"> > results.append("\""); > results.append(this.prepareEventHandlers()); > results.append(this.prepareStyles()); > results.append(this.getElementClose()); > > <matts-idea> > results.append(renderExtraAttributes()); > </matt-sidea> > > return results.toString(); > </snip> > > Use Case for Part B: > > Unfortunately I still can't think of a good HTML 4.01 compliant use case > for > renderExtraAttributes(), but here is a weak try at it. If my other > suggestion of having the render() method call getters instead of > directly > accessing instance variables is used, then renderExtraAttributes() > becomes > more important. If it is not provided and someone wants to stick in > some > non-HTML 4.01 compliant HTML, what they will do is override something > like > the getSize() method so that it correctly renders the size and then > sticks > in the understandard HTML. This is a nasty hack but you know a > programmer > will choose that over duplicating an entire render() method. > > If you made it this far, thanks for reading this long email ;) I know > I've > posted much of this before in several different messages, but hopefully > this > consolidation is useful. > > Matt > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > __________________________________ Do you Yahoo!? The New Yahoo! Shopping - with improved product search http://shopping.yahoo.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]