[ 
https://issues.apache.org/jira/browse/WW-4230?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13799828#comment-13799828
 ] 

Yasser Zamani commented on WW-4230:
-----------------------------------

but 'OgnlOps.java:compareWithConversion' is not part of struts. have you tried 
latest ognl release?

> ognl use  in  expression bug
> ----------------------------
>
>                 Key: WW-4230
>                 URL: https://issues.apache.org/jira/browse/WW-4230
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Other
>            Reporter: zhangkaitao
>
> example
> {code}
> package cn;
> public class A {
>       
>       private Integer id;
>       public Integer getId() {
>               return id;
>       }
>       public void setId(Integer id) {
>               this.id = id;
>       }
>       @Override
>       public int hashCode() {
>               final int prime = 31;
>               int result = 1;
>               result = prime * result + ((id == null) ? 0 : id.hashCode());
>               return result;
>       }
>       @Override
>       public boolean equals(Object obj) {
>               if (this == obj)
>                       return true;
>               if (obj == null)
>                       return false;
>               if (getClass() != obj.getClass())
>                       return false;
>               A other = (A) obj;
>               if (id == null) {
>                       if (other.id != null)
>                               return false;
>               } else if (!id.equals(other.id))
>                       return false;
>               return true;
>       }
>       
>       
> }
> {code}
> {code}
> <%@page import="java.util.ArrayList"%>
> <%@page import="java.util.List"%>
> <%@ page language="java" contentType="text/html; charset=UTF-8" 
> pageEncoding="UTF-8"%>
> <%@ page import="cn.A"%>
> <%@taglib prefix="s" uri="/struts-tags" %>
> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
> "http://www.w3.org/TR/html4/loose.dtd";>
> <html>
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
> <title>Insert title here</title>
> </head>
> <body>
> <%
>       A a1 = new A();
>       a1.setId(1);
>       A a2 = new A();
>       a2.setId(2);
>       
>       List<A> list = new ArrayList();
>       list.add(a1);
>       list.add(a2);
>       
>       request.setAttribute("list", list);
> %>
> <s:iterator value="#request.list" var="a">
>       <s:property value="#list.contains(#a)"/><br/>
> </s:iterator>
> </body>
> </html>
> {code}
> exptect result: 
>    true
>    true
> but was :
>     true
> only one!!!
> on config  struts.el.throwExceptionOnFailure=true , result is : 
> invalid comparison: cn.A and cn.A - Class: ognl.OgnlOps
> File: OgnlOps.java
> Method: compareWithConversion
> compareWithConversion :
> {code}
> case NONNUMERIC:
>                     if ( ( t1 == NONNUMERIC ) && ( t2 == NONNUMERIC ) )
>                     {
>                       if (!(v1 instanceof Comparable)) {
>                               result = -1;
>                               break;
>                       }
>                         if ( ( v1 instanceof Comparable ) && 
> v1.getClass().isAssignableFrom( v2.getClass() ) )
>                         {
>                             result = ( (Comparable) v1 ).compareTo( v2 );
>                             break;
>                         }
>                         throw new IllegalArgumentException( "invalid 
> comparison: " + v1.getClass().getName()
>                             + " and " + v2.getClass().getName() );
>                     }
>                     // else fall through
> {code}
> add code :
> {code}
>                         if (!(v1 instanceof Comparable)) {
>                               result = -1;
>                               break;
>                       }
> {code}
> if class not implement Comparable interface , return -1(false)。  



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to