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 20:34:02 GMT


Maya Muchnik wrote:

> Why you cannot use only one setter "public setIndex (String index)" and then inside check
if the
> string is convertable to integer or not? This way your index can represent a number or
"all".

In Tocmat 3.x, your suggestion works if the tag looks like:

     <foo:displayCLE index="1"/>
     OR
     <foo:displayCLE index="all"/>

However, if the tag is used like so:

     <% int i = 1; %>
     <foo:displayCLE index="<%= i %>"/>

Tomcat tries to call "setIndex ( int i )", instead of trying to convert the int into a String.
 This
results in an error in the JSP.

...alex...


>
>
> "Craig R. McClanahan" wrote:
>
> > 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