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\") }"; }