Glenn,

You're right:  thanks for the correction.  The scriplet should read

  <%
    String a = "foo";
    String b = new String(a);
    pageContext.setAttribute("a", a);
    pageContext.setAttribute("b", b);
  %>

The point remains:  the JSTL expression language's '==' operator leads to
a call to equals() when Strings are being compared.  Marba's originally
problem wasn't related to the '==' operator but to the structure of the
<sql:query> tag's Result objects themselves.  (Marba was using an old
Result implementation.)

Thanks again.

-- 
Shawn Bayern
Author, "JSP Standard Tag Library"  http://www.jstlbook.com
(coming this summer from Manning Publications)

On 10 Apr 2002, Glenn R. Kronschnabl wrote:

> Shawn,
> 
> Just to clarify - your code snippet is very misleading.  The reason
> <c:if test="${a == b}"> evaluates to true is because null == null, not
> because "a == b" where a = "foo".  a & b are not in any scope so in the
> EL, a & b are null - in fact it doesn't matter what you set a or b to.
> 
> Changing your example a little:
> 
> <%
>   String s1 = "string1";
>   String s2 = "string2";
> %>
> 
> s1 = <c:out value="${s1}"/>, s2 = <c:out value="${s2}"/>,
> 
> <c:if test="${s1 == s2}">s1 == s2</c:if>
> 
> Surprisingly, you'll see "s1 == s2" on the output.  Of course you'll
> also see from the line above that "s1 = , s2 = ", that is, you're
> referencing bogus variables.
> 
> Anyways- thought I would clarify for other users out there.
> This does point out a danger in the test= stuff, since you reference
> bogus variables without error, you may not be actually testing what you
> think you're testing.
> 
> Let me know if I'm incorrect.
> 
> Thanks,
> Glenn
> 
> 
> On Tue, 2002-04-09 at 09:57, Shawn Bayern wrote:
> > Are you sure the strings are really identical?  For instance, just to be
> > sure you're using two different Strings with the same value, you can
> > experiment via the String copy constructor.  Doing this demonstrates that
> > JSTL's '==' operator does work correctly:
> > 
> >   <%@ taglib prefix="c" uri="http://java.sun.com/jstl/ea/core"; %>
> > 
> >   <%
> >     String a = "foo";
> >     String b = new String(a);
> >   %>
> > 
> >   <c:if test="${a == b}">
> >     a indeed equals b
> >   </c:if>
> > 
> > Make sure that the two strings in your database don't have different
> > amounts of whitespace, are indeed of the same case (uppercase, lowecase,
> > etc.), and so on.  I often find it useful to print out values with a
> > marker (e.g., the ' character) on both sides to make sure I'm not missing
> > any whitespace.
> > 
> > -- 
> > Shawn Bayern
> > Author, "JSP Standard Tag Library"  http://www.jstlbook.com
> > (coming this summer from Manning Publications)
> > 
> > On Tue, 9 Apr 2002, marba wrote:
> > 
> > > I'm try to compare two string fields in a MySql table row
> > > here's my code that evaluate false even if the strings are identical:
> > > 
> > > <sql:query var="filiali" dataSource="${ds}">
> > >          SELECT * FROM FILIALI_EXT_LOG LEFT JOIN FILIALI_EXT USING (ID)
> > >         WHERE FILIALI_EXT_LOG.LASTMODI > <c:out
> > > value="${user.lastTimeStamp}"/>
> > >  </sql:query>
> > > 
> > > <c:forEach var="row" items="${filiali.rows}">
> > >         <c:set var="campi" value="51"/>
> > >             <c:forEach var="i" begin="0" end="${campi}">
> > > 
> > >                     <c:if test="${row.columns[i] == row.columns[i]}">
> > >                             evaluates true OK
> > >                     </c:if>
> > > 
> > >                     <c:if test="${row.columns[i] == row.columns[i+campi]}">
> > >                             evaluates false even if Strings are identical
> > >                     </c:if>
> > > 
> > > Thank You


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to