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: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]