tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alex Tang" <altit...@airflash.com>
Subject Re: Is it legal to have multiple taglib setter methods for the same property
Date Wed, 07 Feb 2001 05:42:24 GMT
Thanks for the quick reply Craig.

A followup question.  In tomcat 3.1, I was able to do

     public setIndex ( Object o )

If this is legal, I can do my own internal checking to see if the object "o" is a String or
an
int.  However in Tomcat 4.0, I get an error when I try to do this.  I saw some talk about
this
on the tomcat archives, however it wasn't clear whether this is an error on my side or an
error
in tomcat.

Thanks again.

...alex...

"Craig R. McClanahan" wrote:

> IIRC, having two setters with different argument types violates the JavaBeans
> specification.  In addition, it seems to cause the Java reflection APIs to think that
there
> is no setter method at all, so you will get complaints about a read-only property from
any
> JSP implementation that uses this technique.
>
> Craig McClanahan
>
> Alex Tang wrote:
>
> > Hi folks.  (My apologies for crossposting, I wasn't sure if this is a
> > taglib question or a tomcat question/problem)
> >
> > I'm writing a taglib using the JSP 1.1 spec (currently Tomcat 3.x). I'm
> > having a problem with a property "set" method.
> >
> > I have a taglib tag which takes one parameter: "index".  This index can
> > be either the string "all" or a number representing which CLE object to
> > show.
> >
> > I have the following defined in my tld file:
> >
> >     <tag>
> >         <name>displayCLE</name>
> >         <tagclass>com.funkware.DisplayCLETag</tagclass>
> >         <teiclass>com.funkware.DisplayCLEExtraInfo</teiclass>
> >         <info>Display a CLE</info>
> >         <attribute>
> >             <name>index</name>
> >             <required>true</required>
> >             <rtexprvalue>true</rtexprvalue>
> >         </attribute>
> >     </tag>
> >
> > In my "DisplayCLETag.java" file, I have the following:
> >
> >     /**
> >      * <!-- setIndex-->
> >      *
> >      *    Called when the taglib encounters an int for the index field...
> >      *    This form takes an int which happens when a jsp expression is
> >      *    evaluated on the right side of the "index=".
> >      *
> >      * @param nIndex
> >      *    The index
> >      */
> >     public void setIndex ( int nIndex ) {
> >         m_nIndex = nIndex;
> >     }
> >
> >     /**
> >      * <!-- setIndex-->
> >      *
> >      *    Called when the taglib encounters the "index" parameter.  This
> >      *    form takes an object.  We try to convert and Integer and a
> >      *    String.  Anything else we barf on.
> >      *
> >      * @param o
> >      *    An object which we'll try to convert.
> >      */
> >     public void setIndex ( String s ) {
> >         if ( SHOWELEMENT_ALL_STRING.equalsIgnoreCase ( s ) ) {
> >             m_nIndex = SHOWELEMENT_ALL;
> >             return;
> >         }
> >         try {
> >             m_nIndex = Integer.parseInt ( s );
> >         } catch ( NumberFormatException e ) {
> >             Dispatcher.log ( Log.NOTICE, "DisplayListElementTag.setElement",
> >                     "The element: '" + s +
> >                     "' is invalid, it should be a number" );
> >             m_nIndex = SHOWELEMENT_UNDEF;
> >         }
> >     }
> >
> > The reason I have two setter methods for Index is that doing:
> >
> >     <af:displayCLE index="1"/>
> >
> > is different than
> >
> >     <af:displayCLE index="<%= i %>"/> <!-- where i is an int and
== 1 -->
> >
> > Is this a legal way of doing this?
> >
> > I ask because when I run tomcat using the SunJDK1.3, it works fine,
> > however when I run tomcat with the SunJDK1.3 with Hotspot, it fails with
> >
> >      java.lang.NumberFormatException: all
> >              at java.lang.Integer.parseInt(Integer.java:405)
> >              at java.lang.Integer.(Integer.java:540)
> >              at org.apache.jasper.runtime.JspRuntimeLibrary.convert \
> >                 (JspRuntimeLibrary.java:125)
> >              at org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper \
> >                 (JspRuntimeLibrary.java:201)
> >              at ui.html._0002fui_0002fhtml_0002fSList_0002ejspSList_jsp_3._jspService
\
> >                 (_0002fui_0002fhtml_0002fSList_0002ejspSList_jsp_3.java:274)
> >              ...
> >
> > I don't actually think that is hotspot related.  I think i'm doing
> > something wrong.  I've looked through the tomcat code, however not too
> > particularly closely.  I was hoping someone would know what's wrong.
> >
> > In a somewhat unrelated question, I tried having my setIndex() method
> > defined as:
> >
> >      public void setIndex ( Object o )
> >
> > and then doing internal "instanceof" calls and casting to proper
> > objects.  This works in Tomcat 3.1, however it fails in Tomcat 4.0.
> >
> > Did something change in JSP/Taglib 1.2 that makes that type of
> > declaration invalid?
> >
> > Thanks very much.
> >
> > ...alex...


Mime
View raw message