From afd6fe90480344ddc4992a43721074f614803084 Mon Sep 17 00:00:00 2001 From: Rob Harrop Date: Sun, 6 Sep 2009 19:09:29 +0000 Subject: [PATCH] [SPR-5927] fixed FormTag attribute clearing --- .../web/servlet/tags/form/FormTag.java | 18 +++++++++--------- .../web/servlet/tags/form/FormTagTests.java | 10 ++++++++++ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java index 2b745e8c097..271def7c575 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/tags/form/FormTag.java @@ -423,6 +423,15 @@ public class FormTag extends AbstractHtmlElementTag { @Override public int doEndTag() throws JspException { this.tagWriter.endTag(); + return EVAL_PAGE; + } + + /** + * Clears the stored {@link TagWriter}. + */ + @Override + public void doFinally() { + super.doFinally(); this.pageContext.removeAttribute(MODEL_ATTRIBUTE_VARIABLE_NAME, PageContext.REQUEST_SCOPE); this.pageContext.removeAttribute(COMMAND_NAME_VARIABLE_NAME, PageContext.REQUEST_SCOPE); if (this.previousNestedPath != null) { @@ -433,15 +442,6 @@ public class FormTag extends AbstractHtmlElementTag { // Remove exposed nestedPath value. this.pageContext.removeAttribute(NESTED_PATH_VARIABLE_NAME, PageContext.REQUEST_SCOPE); } - return EVAL_PAGE; - } - - /** - * Clears the stored {@link TagWriter}. - */ - @Override - public void doFinally() { - super.doFinally(); this.tagWriter = null; this.previousNestedPath = null; } diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/tags/form/FormTagTests.java b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/tags/form/FormTagTests.java index 892dd373e55..54175918a38 100644 --- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/tags/form/FormTagTests.java +++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/tags/form/FormTagTests.java @@ -253,6 +253,16 @@ public class FormTagTests extends AbstractHtmlElementTagTests { assertContainsAttribute(inputOutput, "type", "hidden"); } + public void testClearAttributesOnFinally() throws Exception { + this.tag.setModelAttribute("model"); + getPageContext().setAttribute("model", "foo bar"); + assertNull(getPageContext().getAttribute(FormTag.MODEL_ATTRIBUTE_VARIABLE_NAME, PageContext.REQUEST_SCOPE)); + this.tag.doStartTag(); + assertNotNull(getPageContext().getAttribute(FormTag.MODEL_ATTRIBUTE_VARIABLE_NAME, PageContext.REQUEST_SCOPE)); + this.tag.doFinally(); + assertNull(getPageContext().getAttribute(FormTag.MODEL_ATTRIBUTE_VARIABLE_NAME, PageContext.REQUEST_SCOPE)); + } + private String getFormTag(String output) { int inputStart = output.indexOf("<", 1); int inputEnd = output.lastIndexOf(">", output.length() - 2);