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

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

zhangkaitao created WW-4230:
-------------------------------

             Summary: 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)