You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Lukasz Lenart (JIRA)" <ji...@apache.org> on 2013/10/19 17:51:44 UTC

[jira] [Resolved] (WW-4230) ognl use in expression bug

     [ https://issues.apache.org/jira/browse/WW-4230?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Lukasz Lenart resolved WW-4230.
-------------------------------

    Resolution: Won't Fix
      Assignee: Lukasz Lenart

If you disagree, please reopen.

> 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
>            Assignee: Lukasz Lenart
>            Priority: Trivial
>
> 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)