From 34ebad5fffe38158d8fb94f1577664a9e26d20e4 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 12 Aug 2010 18:41:24 +0000 Subject: [PATCH] fixed JSP EvalTag to render null result as empty String instead of "null" String (SPR-7459) --- .../web/servlet/tags/EvalTag.java | 16 ++++++++------ .../web/servlet/tags/EvalTagTests.java | 22 +++++++++++++++---- 2 files changed, 27 insertions(+), 11 deletions(-) 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 621dd44baef..a5d3b2514db 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 @@ -32,6 +32,7 @@ import org.springframework.expression.TypedValue; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.expression.spel.support.StandardTypeConverter; +import org.springframework.util.ObjectUtils; import org.springframework.web.util.ExpressionEvaluationUtils; import org.springframework.web.util.HtmlUtils; import org.springframework.web.util.JavaScriptUtils; @@ -103,21 +104,22 @@ public class EvalTag extends HtmlEscapingAwareTag { if (this.evaluationContext == null) { this.evaluationContext = createEvaluationContext(pageContext); } - if (this.var == null) { + if (this.var != null) { + Object result = this.expression.getValue(this.evaluationContext); + pageContext.setAttribute(this.var, result, this.scope); + } + else { try { String result = this.expression.getValue(this.evaluationContext, String.class); - result = isHtmlEscape() ? HtmlUtils.htmlEscape(result) : result; - result = this.javaScriptEscape ? JavaScriptUtils.javaScriptEscape(result) : result; + result = ObjectUtils.getDisplayString(result); + result = (isHtmlEscape() ? HtmlUtils.htmlEscape(result) : result); + result = (this.javaScriptEscape ? JavaScriptUtils.javaScriptEscape(result) : result); pageContext.getOut().print(result); } catch (IOException ex) { throw new JspException(ex); } } - else { - Object result = this.expression.getValue(this.evaluationContext); - pageContext.setAttribute(this.var, result, this.scope); - } return EVAL_PAGE; } 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 e281b14af9c..eca42cf0ad7 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 @@ -52,9 +52,18 @@ public class EvalTagTests extends AbstractTagTests { assertEquals(Tag.EVAL_BODY_INCLUDE, action); action = tag.doEndTag(); assertEquals(Tag.EVAL_PAGE, action); - assertEquals("foo", ((MockHttpServletResponse)context.getResponse()).getContentAsString()); + assertEquals("foo", ((MockHttpServletResponse) context.getResponse()).getContentAsString()); } - + + public void testPrintNullAsEmptyString() throws Exception { + tag.setExpression("bean.null"); + int action = tag.doStartTag(); + assertEquals(Tag.EVAL_BODY_INCLUDE, action); + action = tag.doEndTag(); + assertEquals(Tag.EVAL_PAGE, action); + assertEquals("", ((MockHttpServletResponse) context.getResponse()).getContentAsString()); + } + public void testPrintFormattedScopedAttributeResult() throws Exception { tag.setExpression("bean.formattable"); int action = tag.doStartTag(); @@ -63,7 +72,7 @@ public class EvalTagTests extends AbstractTagTests { assertEquals(Tag.EVAL_PAGE, action); assertEquals("25%", ((MockHttpServletResponse) context.getResponse()).getContentAsString()); } - + public void testPrintHtmlEscapedAttributeResult() throws Exception { tag.setExpression("bean.html()"); tag.setHtmlEscape("true"); @@ -71,7 +80,7 @@ public class EvalTagTests extends AbstractTagTests { assertEquals(Tag.EVAL_BODY_INCLUDE, action); action = tag.doEndTag(); assertEquals(Tag.EVAL_PAGE, action); - assertEquals("<p>", ((MockHttpServletResponse)context.getResponse()).getContentAsString()); + assertEquals("<p>", ((MockHttpServletResponse) context.getResponse()).getContentAsString()); } public void testPrintJavaScriptEscapedAttributeResult() throws Exception { @@ -133,10 +142,15 @@ public class EvalTagTests extends AbstractTagTests { public String html() { return "

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