Browse Source

fixed JSP EvalTag to render null result as empty String instead of "null" String (SPR-7459)

3.0.x
Juergen Hoeller 16 years ago
parent
commit
34ebad5fff
  1. 16
      org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/tags/EvalTag.java
  2. 22
      org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/tags/EvalTagTests.java

16
org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/tags/EvalTag.java

@ -32,6 +32,7 @@ import org.springframework.expression.TypedValue; @@ -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 { @@ -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;
}

22
org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/tags/EvalTagTests.java

@ -52,9 +52,18 @@ public class EvalTagTests extends AbstractTagTests { @@ -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 { @@ -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 { @@ -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 { @@ -133,10 +142,15 @@ public class EvalTagTests extends AbstractTagTests {
public String html() {
return "<p>";
}
public String getBean() {
return "not the bean object";
}
public Object getNull() {
return null;
}
public String js() {
return "function foo() { alert(\"hi\") }";
}

Loading…
Cancel
Save