tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Craig R. McClanahan" <Craig.McClana...@eng.sun.com>
Subject Re: Is it legal to have multiple taglib setter methods for the same property
Date Wed, 07 Feb 2001 17:54:45 GMT
Alex Tang wrote:

> 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.
>

This has been the subject of no small discussion on the expert group for JSP 1.2.  A final
decision
is still pending AFAIK, at which time Tomcat 4.0 will change if it needs to.

>
> Thanks again.
>
> ...alex...
>

Craig


>
> "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...
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
> For additional commands, email: tomcat-dev-help@jakarta.apache.org


Mime
View raw message