From 1191ca3ed091d350bc3fce12230ab07de81304de Mon Sep 17 00:00:00 2001
From: Lukasz Lenart
Date: Mon, 17 Aug 2020 08:30:56 +0200
Subject: [PATCH] WW-5086 Fixes s:set tag with empty body
---
.../java/org/apache/struts2/components/Set.java | 9 ++-------
.../org/apache/struts2/views/jsp/SetTagTest.java | 14 ++++++++++++++
2 files changed, 16 insertions(+), 7 deletions(-)
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 a8233b9e7..fb2a3661c 100644
--- a/core/src/main/java/org/apache/struts2/components/Set.java
+++ b/core/src/main/java/org/apache/struts2/components/Set.java
@@ -31,8 +31,7 @@ import com.opensymphony.xwork2.util.ValueStack;
* complex expression and then simply reference that variable each time rather than the complex expression. This is
* useful in both cases: when the complex expression takes time (performance improvement) or is hard to read (code
* readability improvement).
- * If the tag is used with body content, the evaluation of the value parameter is omitted. Instead, the String to
- * which the body evaluates is set as value for the scoped variable.
+ * If the value parameter is omitted, the String to which the body evaluates is set as value for the scoped variable.
*
* The scopes available are as follows:
*
@@ -94,11 +93,7 @@ public class Set extends ContextBean {
Object o;
if (value == null) {
- if (body != null && !body.equals("")) {
- o = body;
- } else {
- o = findValue("top");
- }
+ o = body;
} else {
o = findValue(value);
}
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 16e56f24b..5edfae401 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
@@ -121,6 +121,20 @@ public class SetTagTest extends AbstractUITagTest {
assertEquals(beginEndSpaceString, context.get("foo"));
}
+ public void testEmptyBody() throws JspException {
+ StrutsMockBodyContent mockBodyContent;
+ String variableName = "foo";
+ tag.setName(variableName);
+ tag.setValue(null);
+ mockBodyContent = new StrutsMockBodyContent(new MockJspWriter());
+ String emptyBody = "";
+ mockBodyContent.setString(emptyBody);
+ tag.setBodyContent(mockBodyContent);
+ tag.doStartTag();
+ tag.doEndTag();
+ assertEquals(emptyBody, context.get(variableName));
+ }
+
protected void setUp() throws Exception {
super.setUp();