You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Scott Ganyo <sc...@eTapestry.com> on 2000/07/17 19:41:42 UTC
RE: Options1: Just Say No (was Re: cvs commit: jakarta-struts/web
/documentation tags.html)
Hehe. Maybe the 1.1 version of OptionsTag should be called
OptionsToSupportThatLegacyStuffTag. ;)
Scott
> -----Original Message-----
> From: Craig R. McClanahan [mailto:Craig.McClanahan@eng.sun.com]
> Sent: Monday, July 17, 2000 12:32 PM
> To: struts-user@jakarta.apache.org
> Cc: struts-dev@jakarta.apache.org
> Subject: Re: Options1: Just Say No (was Re: cvs commit:
> jakarta-struts/web/documentation tags.html)
>
>
> David Geary wrote:
>
> > > <struts:options1> is a version of <struts:options> that
> is compatible with
> > > JDK 1.1, and can enumerate over an array, a Dictionary
> (including a
> > > Hashtable), an Enumeration, or a Vector.
> >
> > I'm sorry, but this is horrible. Why? For the same reason
> that struts tags are not named tag1, tag2, tag3, ...
> >
> > We have EnumerateTag, which is for 1.1, and IterateTag,
> which is for 1.2. That's bad enough, but at least it's
> apparent which tag
> > applies to what version of the JDK; that is, if you know
> that Iterator was added in 1.2, and you understand that there
> is no difference
> > between EnumerateTag and IterateTag except for their
> private iteration algorithm, which really should be nobody's
> business but their
> > own.
> >
> > Now we have OptionsTag and Options1Tag, which share all of
> the drawbacks that EnumerateTag and IterateTag exhibit, but
> in addition:
> > Which tag is for 1.1 and which is for 1.2?
> >
> > Please don't force me to select which JDK version is
> supported by struts tags by using different tags with obscure
> names. All struts
> > tags should work with both 1.1 and 1.2 collections.
> Developers shouldn't even have to think about it.
> >
> > The worst part of all this is that a simple implementation
> of the Adapter design pattern can eliminate all of the
> duplicate classes,
> > leaving us with just IterateTag and OptionsTag.
> >
>
> Having a single version of each tag is the ideal scenario, and is used
> in *most* of the Struts tags. The only cases where there are two
> versions is when a tag wants to use the Java2 collections classes.
>
> So, let's say I want to have just one version of the
> "options" tag (for
> example, that supports collections if they are there, and doesn't
> if they are not there (do you ***really*** want to find out about this
> kind of problem at runtime instead of compile time? OK, let's
> assume you do for the sake of this discussion.) Now, how do we code
> such a tag.
>
> The simple approach would be to try using the Java2 version
> of the tag,
> which includes (among other things), "import java.util.Map". How
> likely is that to compile in a JDK 1.1 environment? You've
> got it -- no
> way.
>
> Well, let's just restrict things so that you have to compile Struts
> under Java2, and then try to use that tag under JDK 1.1. What happens
> now? The tag won't load, because you will get a NoClassDefFoundError
> exception when the JDK 1.1 JVM tries to load classes and interfaces
> that this class depends on, and does not find them.
>
> You can write an adapter class, or you can use reflection (and pay the
> performance price), but the bottom line is this -- Struts users
> should view JDK 1.1 support as *temporary*, not permanent. Therefore,
> all of the "1" versions of the classes will eventually go away, and
> I do not feel motivated to spend anything more than minimal effort to
> support JDK 1.1 users with compatible tags in the mean time. This is
> the motivation for the "1" naming convention -- those tags are always
> the JDK 1.1 equivalents. By that token, "enumerate" should really
> have been "iterate1" but I wasn't thinking far enough ahead
> at the time.
>
> Why the emphasis on "temporary"? Because, as I got permission to
> announce on the TOMCAT-DEV mailing list, the next version of
> the Servlet
> API (version 2.3), is currently planned to include a
> dependency on Java2
> (JDK 1.2 or later). Given that this is the future, and that Java2
> platforms are becoming available on all reasonable platforms, my
> interest in JDK 1.1 support is to give people transitional
> tags that are
> functionally equivalent. If you're in a Java2 world already, just
> ignore the JDK 1.1 tags and they will go away.
>
> For the record, the JDK 1.1-equivalent tags I'm talking about are:
> <struts:enumerate>
> <struts:link1>
> <struts:option1>
>
> >
> > david
>
> Craig McClanahan
>