This is an automated email from the ASF dual-hosted git repository. amashchenko pushed a commit to branch struts-2-5-x in repository https://gitbox.apache.org/repos/asf/struts.git
The following commit(s) were added to refs/heads/struts-2-5-x by this push: new 6f176cc Enhancement for s:set tag for 2.5.x to allow better tag body whitespace control. (#296) 6f176cc is described below commit 6f176cc5a7ee90efe9b3dfbe477d18c2245ea583 Author: JCgH4164838Gh792C124B5 <43964333+jcgh4164838gh792c12...@users.noreply.github.com> AuthorDate: Thu Dec 20 10:59:30 2018 -0500 Enhancement for s:set tag for 2.5.x to allow better tag body whitespace control. (#296) WW-4995 Add trimBody attribute to set tag --- .../java/org/apache/struts2/components/Set.java | 6 ++++ .../java/org/apache/struts2/views/jsp/SetTag.java | 14 ++++++++ .../org/apache/struts2/views/jsp/SetTagTest.java | 38 ++++++++++++++++++++++ 3 files changed, 58 insertions(+) diff --git a/core/src/main/java/org/apache/struts2/components/Set.java b/core/src/main/java/org/apache/struts2/components/Set.java index 6549454..a8233b9 100644 --- a/core/src/main/java/org/apache/struts2/components/Set.java +++ b/core/src/main/java/org/apache/struts2/components/Set.java @@ -83,6 +83,7 @@ import com.opensymphony.xwork2.util.ValueStack; public class Set extends ContextBean { protected String scope; protected String value; + protected boolean trimBody = true; public Set(ValueStack stack) { super(stack); @@ -136,6 +137,11 @@ public class Set extends ContextBean { this.value = value; } + @StrutsTagAttribute(description="Set to false to prevent the default whitespace-trim of this tag's body content", type="Boolean", defaultValue="true") + public void setTrimBody(boolean trimBody) { + this.trimBody = trimBody; + } + @Override public boolean usesBody() { return true; diff --git a/core/src/main/java/org/apache/struts2/views/jsp/SetTag.java b/core/src/main/java/org/apache/struts2/views/jsp/SetTag.java index 161ed259..f369bca 100644 --- a/core/src/main/java/org/apache/struts2/views/jsp/SetTag.java +++ b/core/src/main/java/org/apache/struts2/views/jsp/SetTag.java @@ -35,6 +35,7 @@ public class SetTag extends ContextBeanTag { protected String scope; protected String value; + protected boolean trimBody = true; public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) { return new Set(stack); @@ -59,4 +60,17 @@ public class SetTag extends ContextBeanTag { public void setValue(String value) { this.value = value; } + + public void setTrimBody(boolean trimBody) { + this.trimBody = trimBody; + } + + @Override + protected String getBody() { + if (trimBody) { + return super.getBody(); + } else { + return (bodyContent == null ? "" : bodyContent.getString()); + } + } } diff --git a/core/src/test/java/org/apache/struts2/views/jsp/SetTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/SetTagTest.java index e5eba5e..16e56f2 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/SetTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/SetTagTest.java @@ -18,6 +18,8 @@ */ package org.apache.struts2.views.jsp; +import com.mockobjects.servlet.MockJspWriter; +import java.io.IOException; import javax.servlet.jsp.JspException; @@ -83,6 +85,42 @@ public class SetTagTest extends AbstractUITagTest { assertEquals(chewie, context.get("chewie")); } + public void testSetTrimBody() throws JspException, IOException { + final String beginEndSpaceString = " Preceding and trailing spaces. "; + final String trimmedBeginEndSpaceString = beginEndSpaceString.trim(); + StrutsMockBodyContent mockBodyContent; + + tag.setName("foo"); + tag.setValue(null); + // Do not set any value - default for tag should be true + mockBodyContent = new StrutsMockBodyContent(new MockJspWriter()); + mockBodyContent.setString(beginEndSpaceString); + tag.setBodyContent(mockBodyContent); + tag.doStartTag(); + tag.doEndTag(); + assertEquals(trimmedBeginEndSpaceString, context.get("foo")); + + tag.setName("foo"); + tag.setValue(null); + tag.setTrimBody(true); + mockBodyContent = new StrutsMockBodyContent(new MockJspWriter()); + mockBodyContent.setString(beginEndSpaceString); + tag.setBodyContent(mockBodyContent); + tag.doStartTag(); + tag.doEndTag(); + assertEquals(trimmedBeginEndSpaceString, context.get("foo")); + + tag.setName("foo"); + tag.setValue(null); + tag.setTrimBody(false); + mockBodyContent = new StrutsMockBodyContent(new MockJspWriter()); + mockBodyContent.setString(beginEndSpaceString); + tag.setBodyContent(mockBodyContent); + tag.doStartTag(); + tag.doEndTag(); + assertEquals(beginEndSpaceString, context.get("foo")); + } + protected void setUp() throws Exception { super.setUp();