From 50c55937404d1ece094dec6ccb5a89f5d3cc567e Mon Sep 17 00:00:00 2001 From: Scott Andrews Date: Wed, 10 Mar 2010 17:44:14 +0000 Subject: [PATCH] SPR-6923 SpEL resolving nested property as outer object --- .../springframework/web/servlet/tags/EvalTag.java | 2 +- .../web/servlet/tags/EvalTagTests.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/tags/EvalTag.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/tags/EvalTag.java index 3a083c7516..f6a22896cf 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/tags/EvalTag.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/tags/EvalTag.java @@ -150,7 +150,7 @@ public class EvalTag extends HtmlEscapingAwareTag { } public boolean canRead(EvaluationContext context, Object target, String name) throws AccessException { - return (resolveImplicitVariable(name) != null || this.pageContext.findAttribute(name) != null); + return target == null && (resolveImplicitVariable(name) != null || this.pageContext.findAttribute(name) != null); } public TypedValue read(EvaluationContext context, Object target, String name) throws AccessException { diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/tags/EvalTagTests.java b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/tags/EvalTagTests.java index e3d404ebd0..a2d31405ce 100644 --- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/tags/EvalTagTests.java +++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/tags/EvalTagTests.java @@ -90,6 +90,17 @@ public class EvalTagTests extends AbstractTagTests { assertEquals(new BigDecimal(".25"), context.getAttribute("foo")); } + // SPR-6923 + public void testNestedPropertyWithAttribtueName() throws Exception { + tag.setExpression("bean.bean"); + tag.setVar("foo"); + int action = tag.doStartTag(); + assertEquals(Tag.EVAL_BODY_INCLUDE, action); + action = tag.doEndTag(); + assertEquals(Tag.EVAL_PAGE, action); + assertEquals("not the bean object", context.getAttribute("foo")); + } + public static class Bean { public String method() { @@ -104,6 +115,9 @@ public class EvalTagTests extends AbstractTagTests { public String html() { return "

"; } + public String getBean() { + return "not the bean object"; + } public String js() { return "function foo() { alert(\"hi\") }";