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

This commit is contained in:
Juergen Hoeller 2010-08-12 18:41:24 +00:00
parent 9bd0bd9c3a
commit 34ebad5fff
2 changed files with 27 additions and 11 deletions

View File

@ -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;
}

View File

@ -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 "<p>";
}
public String getBean() {
return "not the bean object";
}
public Object getNull() {
return null;
}
public String js() {
return "function foo() { alert(\"hi\") }";
}