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