You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Dustin Frazier <du...@philanthropix.org> on 2003/08/30 00:27:25 UTC

string bug in OGNL?

Posting this to both the OGNL interest list and the Tapestry user list only
because I've never seen any traffic on the OGNL list (I'm new, though)...

I found what I think is a bug in either Tapestry or (more likely) OGNL.  The
following bit of code works as expected (foo on value is a string):

<span jwcid="@Insert" value='ognl:value.foo == "Y" ? "Yes" : "No"'/>
[works great!]

However, swapping the single and double quotes in the value attribute doesn't
work:

<span jwcid="@Insert" value="ognl:value.foo == 'Y' ? 'Yes' : 'No'"/>
[doesn't work]

I'm using the latest OGNL (2.6.3) along with Tapestry 3.0b2.  Do I
misunderstand how quoting works in OGNL and/or Tapestry?  I thought single and
double quotes were interchangeable in the latest OGNL...

Dustin


RE: string bug in OGNL?

Posted by Paul Ferraro <pa...@softhome.net>.
Rather than use an inline component, you might want to move the embedded
component definition to your page/component specification (.page/.jwc
file) to avoid quote issues.  The v3.0 of Tapestry allows the following:

<component id="insertFoo" type="Insert">
	<binding name="value">value.foo == "Y" ? "Yes" : "No"</binding>
</component>

Check out this page for details:
http://jakarta.apache.org/tapestry/doc/TapestryUsersGuide/spec.binding.html

Hope this helps,

Paul

On Fri, 2003-08-29 at 18:42, Dustin Frazier wrote:
> Yeah, it just silently failed.  The expression to the left of the ? always
> evaluates to false, so the second option after the : is returned.  I guess I
> thought since the field on the left was of type java.lang.String, it would
> know to treat 'Y' as a string.  Actually, I wasn't thinking about this stuff
> at all, which is why it was really tricky thing to debug!  Now that I know
> what's going on, I'm surprised that foo.equals('Y') fails when foo = "Y" (in
> Java), but maybe there are subtle i18n issues that I'm not thinking about.  It
> is Friday at 6:45pm... :)
> 
> I'll stick with double quotes around single-character strings for now...
> 
> Dustin
> 
> -----Original Message-----
> From: Drew Davidson [mailto:drew@ognl.org] 
> Sent: Friday, August 29, 2003 5:15 PM
> To: Dustin Frazier
> Cc: tapestry-user@jakarta.apache.org; ognl-interest@lists.ognl.org
> Subject: Re: string bug in OGNL?
> 
> 
> Dustin Frazier wrote:
> 
> >Posting this to both the OGNL interest list and the Tapestry user list 
> >only because I've never seen any traffic on the OGNL list (I'm new, 
> >though)...
> >  
> >
> Mostly that's because OGNL is bug-free. :-)
> 
> >I found what I think is a bug in either Tapestry or (more likely) OGNL.  
> >The following bit of code works as expected (foo on value is a string):
> >
> ><span jwcid="@Insert" value='ognl:value.foo == "Y" ? "Yes" : "No"'/> 
> >[works great!]
> >
> >However, swapping the single and double quotes in the value attribute 
> >doesn't
> >work:
> >
> ><span jwcid="@Insert" value="ognl:value.foo == 'Y' ? 'Yes' : 'No'"/> 
> >[doesn't work]
> >  
> >
> You are getting an exception or it just fails?  I presume it fails 
> (String.equals(Character) will always fail).
> 
> >I'm using the latest OGNL (2.6.3) along with Tapestry 3.0b2.  Do I 
> >misunderstand how quoting works in OGNL and/or Tapestry?  I thought 
> >single and double quotes were interchangeable in the latest OGNL...
> >  
> >
> Well, the problem here is that the 'Y' is being turned into a single 
> Character.  The ' quote character does double duty as character quote 
> and as String quote.  You might have to encase this in new 
> java.lang.String(new char[]{'Y'}) to get your desired results (boy 
> that's ugly).
> 
> I know it's a pain but there is currently no way of telling if you want 
> a string or a character just by the quoting, so it makes an assuption.
> 
> - Drew


RE: string bug in OGNL?

Posted by Dustin Frazier <du...@philanthropix.org>.
Yeah, it just silently failed.  The expression to the left of the ? always
evaluates to false, so the second option after the : is returned.  I guess I
thought since the field on the left was of type java.lang.String, it would
know to treat 'Y' as a string.  Actually, I wasn't thinking about this stuff
at all, which is why it was really tricky thing to debug!  Now that I know
what's going on, I'm surprised that foo.equals('Y') fails when foo = "Y" (in
Java), but maybe there are subtle i18n issues that I'm not thinking about.  It
is Friday at 6:45pm... :)

I'll stick with double quotes around single-character strings for now...

Dustin

-----Original Message-----
From: Drew Davidson [mailto:drew@ognl.org] 
Sent: Friday, August 29, 2003 5:15 PM
To: Dustin Frazier
Cc: tapestry-user@jakarta.apache.org; ognl-interest@lists.ognl.org
Subject: Re: string bug in OGNL?


Dustin Frazier wrote:

>Posting this to both the OGNL interest list and the Tapestry user list 
>only because I've never seen any traffic on the OGNL list (I'm new, 
>though)...
>  
>
Mostly that's because OGNL is bug-free. :-)

>I found what I think is a bug in either Tapestry or (more likely) OGNL.  
>The following bit of code works as expected (foo on value is a string):
>
><span jwcid="@Insert" value='ognl:value.foo == "Y" ? "Yes" : "No"'/> 
>[works great!]
>
>However, swapping the single and double quotes in the value attribute 
>doesn't
>work:
>
><span jwcid="@Insert" value="ognl:value.foo == 'Y' ? 'Yes' : 'No'"/> 
>[doesn't work]
>  
>
You are getting an exception or it just fails?  I presume it fails 
(String.equals(Character) will always fail).

>I'm using the latest OGNL (2.6.3) along with Tapestry 3.0b2.  Do I 
>misunderstand how quoting works in OGNL and/or Tapestry?  I thought 
>single and double quotes were interchangeable in the latest OGNL...
>  
>
Well, the problem here is that the 'Y' is being turned into a single 
Character.  The ' quote character does double duty as character quote 
and as String quote.  You might have to encase this in new 
java.lang.String(new char[]{'Y'}) to get your desired results (boy 
that's ugly).

I know it's a pain but there is currently no way of telling if you want 
a string or a character just by the quoting, so it makes an assuption.

- Drew

-- 
+---------------------------------+
< Drew Davidson | OGNL Technology >
<     Professional Open Source    >
+---------------------------------+
|  Email: drew@ognl.org          /
|    Web: http://www.ognl.org   /
|    Vox: (520) 531-1966       <
|    Fax: (520) 531-1965        \
| Mobile: (520) 405-2967         \
+---------------------------------+



---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-user-help@jakarta.apache.org



Re: string bug in OGNL?

Posted by Drew Davidson <dr...@ognl.org>.
Dustin Frazier wrote:

>Posting this to both the OGNL interest list and the Tapestry user list only
>because I've never seen any traffic on the OGNL list (I'm new, though)...
>  
>
Mostly that's because OGNL is bug-free. :-)

>I found what I think is a bug in either Tapestry or (more likely) OGNL.  The
>following bit of code works as expected (foo on value is a string):
>
><span jwcid="@Insert" value='ognl:value.foo == "Y" ? "Yes" : "No"'/>
>[works great!]
>
>However, swapping the single and double quotes in the value attribute doesn't
>work:
>
><span jwcid="@Insert" value="ognl:value.foo == 'Y' ? 'Yes' : 'No'"/>
>[doesn't work]
>  
>
You are getting an exception or it just fails?  I presume it fails 
(String.equals(Character) will always fail).

>I'm using the latest OGNL (2.6.3) along with Tapestry 3.0b2.  Do I
>misunderstand how quoting works in OGNL and/or Tapestry?  I thought single and
>double quotes were interchangeable in the latest OGNL...
>  
>
Well, the problem here is that the 'Y' is being turned into a single 
Character.  The ' quote character does double duty as character quote 
and as String quote.  You might have to encase this in new 
java.lang.String(new char[]{'Y'}) to get your desired results (boy 
that's ugly).

I know it's a pain but there is currently no way of telling if you want 
a string or a character just by the quoting, so it makes an assuption.

- Drew

-- 
+---------------------------------+
< Drew Davidson | OGNL Technology >
<     Professional Open Source    >
+---------------------------------+
|  Email: drew@ognl.org          /
|    Web: http://www.ognl.org   /
|    Vox: (520) 531-1966       <
|    Fax: (520) 531-1965        \
| Mobile: (520) 405-2967         \
+---------------------------------+