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


Reply via email to