You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Arun Katkere <ka...@praja.com> on 2000/09/19 22:57:16 UTC

Spec Q/TagBeginGenerator behavior

TagBeginGenerator does compile time conversion from String to the type of
the property as specified in the spec. table 2-4 (section 2.13.2) and more
(looking at the code). But, it doesn't work for property of type
java.lang.Object. So, if I have a tag (say foo) with a property of type
object (say attr1), the following doesn't work:

<a:foo attr1="bar"/>

(fails compilation with "Unable to convert a String to java.lang.Object for
attribute attr1").

If we change it to the following uglyness, it works:

<% String bar = "bar"; %>
<a:foo attr1="<%=bar%>"/>

Questions:

1. Is String to java.lang.Object implicit conversion a spec. oversight or is
there a good reason for not supporting it. Since java.lang.String is
java.lang.Object, it seems strange to say, "Unable to convert String to
java.lang.Object" when String *is* an Object.

2. Regardless of how the spec. feels about it, can Jasper support this as a
non-normative feature? As far as I can see, it is just one (half) a line in
TagBeginGenerator, change "if (c == String.class)" to "if (c == String.class
|| c == Object.class)" in convertString method.

3. Does anyone have a workaround suggestion (other than providing a attr1Str
property that calls setAttr1(): difficult to explain to the tag library
user)?

-arun

Re: Spec Q/TagBeginGenerator behavior

Posted by Pierre Delisle <pi...@sun.com>.
Arun Katkere wrote:
> 
> TagBeginGenerator does compile time conversion from String to the type of
> the property as specified in the spec. table 2-4 (section 2.13.2) and more
> (looking at the code). But, it doesn't work for property of type
> java.lang.Object. So, if I have a tag (say foo) with a property of type
> object (say attr1), the following doesn't work:
> 
> <a:foo attr1="bar"/>
> 
> (fails compilation with "Unable to convert a String to java.lang.Object for
> attribute attr1").
> 
> If we change it to the following uglyness, it works:
> 
> <% String bar = "bar"; %>
> <a:foo attr1="<%=bar%>"/>
> 
> Questions:
> 
> 1. Is String to java.lang.Object implicit conversion a spec. oversight or is
> there a good reason for not supporting it. Since java.lang.String is
> java.lang.Object, it seems strange to say, "Unable to convert String to
> java.lang.Object" when String *is* an Object.

Your point is well taken. I've forwarded your email to the JSP spec lead to
get his official comments on this.

> 2. Regardless of how the spec. feels about it, can Jasper support this as a
> non-normative feature? As far as I can see, it is just one (half) a line in
> TagBeginGenerator, change "if (c == String.class)" to "if (c == String.class
> || c == Object.class)" in convertString method.

Jasper is the reference implementation for the JSP spec. Can't have non-normative
features :-(.

> 3. Does anyone have a workaround suggestion (other than providing a attr1Str
> property that calls setAttr1(): difficult to explain to the tag library
> user)?

Can't attr1 become attr1Obj, and have attr1 be the string?

    -- Pierre