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)