From ecef56b546b1a7ae3a8411b3e2af2b64fc72799e Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Tue, 4 Jan 2022 09:01:21 +0100 Subject: [PATCH 1/4] WW-5022 Sets escapeHtmlBody to false by default and defines new flag to switch to true globally --- core/pom.xml | 2 +- .../org/apache/struts2/StrutsConstants.java | 14 +- .../org/apache/struts2/components/Anchor.java | 18 +-- .../apache/struts2/components/Component.java | 22 +-- .../org/apache/struts2/components/Submit.java | 18 +-- .../struts2/views/jsp/ui/AnchorTag.java | 18 +-- .../struts2/views/jsp/ui/SubmitTag.java | 8 +- .../struts2/components/ComponentTest.java | 133 +++++++----------- .../struts2/views/jsp/ui/AnchorTest.java | 48 ++++--- .../struts2/views/jsp/ui/CheckboxTest.java | 4 +- .../apache/struts2/views/jsp/ui/FileTest.java | 4 +- .../struts2/views/jsp/ui/SubmitTest.java | 9 +- .../struts2/views/jsp/ui/TextareaTest.java | 4 +- .../src/test/resources/struts-escape-body.xml | 31 ++++ 14 files changed, 168 insertions(+), 165 deletions(-) create mode 100644 core/src/test/resources/struts-escape-body.xml diff --git a/core/pom.xml b/core/pom.xml index 980714243..cd5677742 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -342,7 +342,7 @@ org.slf4j slf4j-simple - true + test + + + + + + + + From 7a696523f02dcf118003a708f4d8b3fcd9d48436 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Tue, 4 Jan 2022 19:49:01 +0100 Subject: [PATCH 2/4] WW-5022 Documents that setting escapeHtmlBody per tag takes precedence over global flag --- .../org/apache/struts2/default.properties | 7 +++++- .../struts2/views/jsp/ui/AnchorTest.java | 23 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/core/src/main/resources/org/apache/struts2/default.properties b/core/src/main/resources/org/apache/struts2/default.properties index df4069400..571dcf59e 100644 --- a/core/src/main/resources/org/apache/struts2/default.properties +++ b/core/src/main/resources/org/apache/struts2/default.properties @@ -151,6 +151,11 @@ struts.ui.theme.expansion.token=~~~ ### Sets the default template type. Either ftl, vm, or jsp struts.ui.templateSuffix=ftl +### Sets a global flag which will escape html body of Anchor, Submit and Component tag +### You can control this flag per tag, e.g.: ... +### and this take precedence over the global flag +# struts.ui.escapeHtmlBody=true + ### Configuration reloading ### This will cause the configuration to reload struts.xml when it is changed # struts.configuration.xml.reload=false @@ -230,7 +235,7 @@ struts.handle.exception=true ### Applies maximum length allowed on OGNL expressions for security enhancement (optional) ### -### **WARNING**: If developers enable this option (by configuration) they should make sure that they understand the implications of setting +### **WARNING**: If developers enable this option (by configuration) they should make sure that they understand the implications of setting ### struts.ognl.expressionMaxLength. They must choose a value large enough to permit ALL valid OGNL expressions used within the application. ### Values larger than the 200-400 range have diminishing security value (at which point it is really only a "style guard" for long OGNL ### expressions in an application. Setting a value of null or "" will also disable the feature. diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java index 53fa8ba67..7c3f80d71 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/AnchorTest.java @@ -298,4 +298,27 @@ public class AnchorTest extends AbstractUITagTest { tag.doEndTag(); } + public void testTagAttributeTakesPrecedenceOverInjectEscapeHtmlBodyFlag() throws Exception { + // given + initDispatcherWithConfigs("struts-default.xml, struts-escape-body.xml"); + String escapeHtmlBody = container.getInstance(String.class, StrutsConstants.STRUTS_UI_ESCAPE_HTML_BODY); + assertEquals("true", escapeHtmlBody); + + createMocks(); + + createAction(); + + AnchorTag tag = createTag(); + tag.setEscapeHtmlBody("false"); + + // when + tag.doStartTag(); + + // then + Anchor component = (Anchor) tag.getComponent(); + assertFalse(component.escapeHtmlBody()); + + tag.doEndTag(); + } + } From effe6875b75ab91fd5b1b83bddd2929d421738f8 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 7 Jan 2022 10:07:13 +0100 Subject: [PATCH 3/4] WW-5022 Pass escapeHtmlBody flag to JavaTemplates tags --- .../org/apache/struts2/components/Anchor.java | 4 ++- .../org/apache/struts2/components/Submit.java | 7 ++-- .../src/site/resources/tags/a-attributes.html | 2 +- .../resources/tags/submit-attributes.html | 2 +- .../views/java/DefaultTagHandlerFactory.java | 13 +++---- .../views/java/simple/AnchorHandler.java | 6 ++-- .../views/java/simple/SimpleTheme.java | 6 ++-- .../views/java/simple/SubmitHandler.java | 14 +++++--- .../struts2/views/java/simple/AnchorTest.java | 36 +++++++++++++++++++ 9 files changed, 69 insertions(+), 21 deletions(-) diff --git a/core/src/main/java/org/apache/struts2/components/Anchor.java b/core/src/main/java/org/apache/struts2/components/Anchor.java index e00291dd3..ba9d84ac9 100644 --- a/core/src/main/java/org/apache/struts2/components/Anchor.java +++ b/core/src/main/java/org/apache/struts2/components/Anchor.java @@ -112,6 +112,8 @@ public class Anchor extends ClosingUIBean { addParameter("href", ensureAttributeSafelyNotEscaped(builtHref)); } } + + addParameter("escapeHtmlBody", escapeHtmlBody); } @Inject(StrutsConstants.STRUTS_URL_INCLUDEPARAMS) @@ -264,7 +266,7 @@ public class Anchor extends ClosingUIBean { urlProvider.setForceAddSchemeHostAndPort(forceAddSchemeHostAndPort); } - @StrutsTagAttribute(description = "Specifies whether to HTML-escape the tag body or not", type = "Boolean", defaultValue = "true") + @StrutsTagAttribute(description = "Specifies whether to HTML-escape the tag body or not", type = "Boolean", defaultValue = "false") public void setEscapeHtmlBody(boolean escapeHtmlBody) { this.escapeHtmlBody = escapeHtmlBody; } diff --git a/core/src/main/java/org/apache/struts2/components/Submit.java b/core/src/main/java/org/apache/struts2/components/Submit.java index 6a9ce970c..870e8ad0b 100644 --- a/core/src/main/java/org/apache/struts2/components/Submit.java +++ b/core/src/main/java/org/apache/struts2/components/Submit.java @@ -85,8 +85,11 @@ public class Submit extends FormButton { public void evaluateExtraParams() { super.evaluateExtraParams(); - if (src != null) + if (src != null) { addParameter("src", findString(src)); + } + + addParameter("escapeHtmlBody", escapeHtmlBody); } /** @@ -103,7 +106,7 @@ public class Submit extends FormButton { this.src = src; } - @StrutsTagAttribute(description = "Specifies whether to HTML-escape the tag body or not", type = "Boolean", defaultValue = "true") + @StrutsTagAttribute(description = "Specifies whether to HTML-escape the tag body or not", type = "Boolean", defaultValue = "false") public void setEscapeHtmlBody(boolean escapeHtmlBody) { this.escapeHtmlBody = escapeHtmlBody; } diff --git a/core/src/site/resources/tags/a-attributes.html b/core/src/site/resources/tags/a-attributes.html index e9cbb587f..e9fd9089c 100644 --- a/core/src/site/resources/tags/a-attributes.html +++ b/core/src/site/resources/tags/a-attributes.html @@ -112,7 +112,7 @@ escapeHtmlBody false - true + false false Boolean Specifies whether to HTML-escape the tag body or not diff --git a/core/src/site/resources/tags/submit-attributes.html b/core/src/site/resources/tags/submit-attributes.html index 9f790b235..52ed55ad0 100644 --- a/core/src/site/resources/tags/submit-attributes.html +++ b/core/src/site/resources/tags/submit-attributes.html @@ -88,7 +88,7 @@ escapeHtmlBody false - true + false false Boolean Specifies whether to HTML-escape the tag body or not diff --git a/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/DefaultTagHandlerFactory.java b/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/DefaultTagHandlerFactory.java index 4e356c3a6..4110320da 100644 --- a/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/DefaultTagHandlerFactory.java +++ b/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/DefaultTagHandlerFactory.java @@ -22,14 +22,15 @@ import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; /** - * Default implementation of TagHandlerFactory + * Default implementation of TagHandlerFactory */ public class DefaultTagHandlerFactory implements TagHandlerFactory { - private static final Logger LOG = LogManager.getLogger(DefaultTagHandlerFactory.class); - - private Class tagHandlerClass; - public DefaultTagHandlerFactory(Class tagHandlerClass) { + private static final Logger LOG = LogManager.getLogger(DefaultTagHandlerFactory.class); + + private final Class tagHandlerClass; + + public DefaultTagHandlerFactory(Class tagHandlerClass) { this.tagHandlerClass = tagHandlerClass; } @@ -41,7 +42,7 @@ public class DefaultTagHandlerFactory implements TagHandlerFactory { } catch (Exception e) { LOG.error("Failed to instantiate tag handler class [{}]", tagHandlerClass.getName(), e); } - + return null; } diff --git a/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/AnchorHandler.java b/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/AnchorHandler.java index 12df24635..405088f0c 100644 --- a/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/AnchorHandler.java +++ b/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/AnchorHandler.java @@ -45,8 +45,10 @@ public class AnchorHandler extends AbstractTagHandler implements TagGenerator { .addIfExists("tabindex", params.get("tabindex")); start("a", attrs); String body = (String) params.get("body"); - if (StringUtils.isNotEmpty(body)) - characters(body, false); + Boolean escapeHtmlBody = (Boolean) params.get("escapeHtmlBody"); + if (StringUtils.isNotEmpty(body)) { + characters(body, escapeHtmlBody); + } end("a"); } } diff --git a/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/SimpleTheme.java b/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/SimpleTheme.java index adfc7f9c8..c65a21c05 100644 --- a/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/SimpleTheme.java +++ b/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/SimpleTheme.java @@ -65,13 +65,13 @@ public class SimpleTheme extends DefaultTheme { setName("simple"); } - private class FactoryList extends ArrayList { + private static class FactoryList extends ArrayList { private static final long serialVersionUID = -1551895041394434032L; - public FactoryList(Class... classes) { + public FactoryList(Class... classes) { super(); - for (Class cls : classes) { + for (Class cls : classes) { add(new DefaultTagHandlerFactory(cls)); } add(new DefaultTagHandlerFactory(XHTMLTagSerializer.class)); diff --git a/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/SubmitHandler.java b/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/SubmitHandler.java index 8207d7ba5..27a39d3f3 100644 --- a/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/SubmitHandler.java +++ b/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/SubmitHandler.java @@ -73,6 +73,7 @@ public class SubmitHandler extends AbstractTagHandler implements TagGenerator { public void generate() throws IOException { Map params = context.getParameters(); String body = (String) params.get("body"); + Boolean escapeHtmlBody = (Boolean) params.get("escapeHtmlBody"); String type = StringUtils.defaultString((String) params.get("type"), "input"); if ("button".equals(type)) { @@ -81,16 +82,19 @@ public class SubmitHandler extends AbstractTagHandler implements TagGenerator { characters(body, false); else if (params.containsKey("label")) { String label = (String) params.get("label"); - if (StringUtils.isNotEmpty(label)) - characters(label, false); + if (StringUtils.isNotEmpty(label)) { + characters(label, escapeHtmlBody); + } } end("button"); } else if ("image".equals(type)) { - if (StringUtils.isNotEmpty(body)) - characters(body, false); + if (StringUtils.isNotEmpty(body)) { + characters(body, escapeHtmlBody); + } end("input"); - } else + } else { end("input"); + } } } } diff --git a/plugins/javatemplates/src/test/java/org/apache/struts2/views/java/simple/AnchorTest.java b/plugins/javatemplates/src/test/java/org/apache/struts2/views/java/simple/AnchorTest.java index d727a7440..58709a245 100644 --- a/plugins/javatemplates/src/test/java/org/apache/struts2/views/java/simple/AnchorTest.java +++ b/plugins/javatemplates/src/test/java/org/apache/struts2/views/java/simple/AnchorTest.java @@ -69,6 +69,42 @@ public class AnchorTest extends AbstractTest { assertEquals(expected, output); } + public void testEnableEscapeBody() { + tag.setName("name_"); + tag.setHref("http://sometest.com?ab=10"); + tag.setEscapeHtmlBody(true); + tag.evaluateParams(); + + map.putAll(tag.getParameters()); + context.getParameters().put("body", s("")); + + theme.renderTag(getTagName(), context); + theme.renderTag(getTagName() + "-close", context); + + String output = writer.getBuffer().toString(); + String expected = s("<i class="i-image"/>"); + + assertEquals(expected, output); + } + + public void testDefaultDisabledEscapeBody() { + tag.setName("name_"); + tag.setHref("http://sometest.com?ab=10"); + //tag.setEscapeHtmlBody(true); + tag.evaluateParams(); + + map.putAll(tag.getParameters()); + context.getParameters().put("body", s("")); + + theme.renderTag(getTagName(), context); + theme.renderTag(getTagName() + "-close", context); + + String output = writer.getBuffer().toString(); + String expected = s(""); + + assertEquals(expected, output); + } + @Override protected void setUp() throws Exception { super.setUp(); From 61e6d342bab6f4d0e0339300a79cb350747cc7cc Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Sun, 23 Jan 2022 10:45:14 +0100 Subject: [PATCH 4/4] WW-5022 Cleans up escapeHtmlBody flag with default value --- apps/showcase/src/main/webapp/WEB-INF/decorators/main.jsp | 4 ++-- .../src/main/webapp/WEB-INF/filedownload/index.jsp | 4 ++-- .../src/main/webapp/WEB-INF/hangman/hangmanNonAjax.ftl | 4 ++-- .../src/main/webapp/WEB-INF/person/new-person.ftl | 2 +- .../WEB-INF/tags/non-ui/actionPrefix/actionPrefix.ftl | 2 +- .../tags/non-ui/actionPrefix/actionPrefixExample.ftl | 8 ++++---- .../WEB-INF/tags/non-ui/actionPrefix/methodPrefix.ftl | 4 ++-- .../WEB-INF/tags/non-ui/actionPrefix/normalSubmit.ftl | 4 ++-- .../tags/non-ui/actionPrefix/redirectActionPrefix.ftl | 4 ++-- .../non-ui/iteratorTag/appendIteratorTagDemoResult.jsp | 2 +- .../non-ui/iteratorTag/iteratorGeneratorTagDemoResult.jsp | 2 +- .../non-ui/iteratorTag/mergeIteratorTagDemoResult.jsp | 2 +- .../non-ui/iteratorTag/subsetIteratorTagDemoResult.jsp | 2 +- apps/showcase/src/main/webapp/WEB-INF/token/example4.ftl | 2 +- .../main/java/org/apache/struts2/components/Submit.java | 2 +- 15 files changed, 24 insertions(+), 24 deletions(-) diff --git a/apps/showcase/src/main/webapp/WEB-INF/decorators/main.jsp b/apps/showcase/src/main/webapp/WEB-INF/decorators/main.jsp index 39a3a03ea..0d09eb647 100644 --- a/apps/showcase/src/main/webapp/WEB-INF/decorators/main.jsp +++ b/apps/showcase/src/main/webapp/WEB-INF/decorators/main.jsp @@ -113,7 +113,7 @@ - Download image file. + Download image file.
@@ -47,7 +47,7 @@
- Download ZIP file. + Download ZIP file.
diff --git a/apps/showcase/src/main/webapp/WEB-INF/hangman/hangmanNonAjax.ftl b/apps/showcase/src/main/webapp/WEB-INF/hangman/hangmanNonAjax.ftl index 046ab4bab..3c3251892 100644 --- a/apps/showcase/src/main/webapp/WEB-INF/hangman/hangmanNonAjax.ftl +++ b/apps/showcase/src/main/webapp/WEB-INF/hangman/hangmanNonAjax.ftl @@ -125,7 +125,7 @@ <#else> " width="381" height="44" /> - <@s.a href="%{#startHref}" escapeHtmlBody="false"> + <@s.a href="%{#startHref}"> " width="250" height="43" /> <#else> @@ -139,7 +139,7 @@ <@s.a href="%{#url}" id="%{#currentCharacter}" - escapeHtmlBody="false" + > " width="36" border="0" /> diff --git a/apps/showcase/src/main/webapp/WEB-INF/person/new-person.ftl b/apps/showcase/src/main/webapp/WEB-INF/person/new-person.ftl index 6af4da446..07a66d4a6 100644 --- a/apps/showcase/src/main/webapp/WEB-INF/person/new-person.ftl +++ b/apps/showcase/src/main/webapp/WEB-INF/person/new-person.ftl @@ -59,7 +59,7 @@
- <@s.submit value="Create person" cssClass="btn btn-primary" escapeHtmlBody="false"/> + <@s.submit value="Create person" cssClass="btn btn-primary"/>
diff --git a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/actionPrefix.ftl b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/actionPrefix.ftl index 806883716..6e4432ea5 100644 --- a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/actionPrefix.ftl +++ b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/actionPrefix.ftl @@ -35,7 +35,7 @@

The text you've entered is ${text!''}

- <@s.a href="javascript:history.back();" cssClass="btn btn-info" escapeHtmlBody="false"> Back + <@s.a href="javascript:history.back();" cssClass="btn btn-info"> Back diff --git a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/actionPrefixExample.ftl b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/actionPrefixExample.ftl index 63312c786..98b0a9232 100644 --- a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/actionPrefixExample.ftl +++ b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/actionPrefixExample.ftl @@ -57,13 +57,13 @@ <@s.textfield label="Enter Some Text" name="text" /> - <@s.submit action="actionPrefix" value="%{'action prefix'}" cssClass="btn" escapeHtmlBody="false" /> + <@s.submit action="actionPrefix" value="%{'action prefix'}" cssClass="btn" /> - <@s.submit method="alternateMethod" value="%{'method prefix'}" cssClass="btn" escapeHtmlBody="false" /> + <@s.submit method="alternateMethod" value="%{'method prefix'}" cssClass="btn" /> - <@s.submit value="Normal Submit" cssClass="btn" escapeHtmlBody="false" /> + <@s.submit value="Normal Submit" cssClass="btn" /> - <@s.submit action="redirectActionPrefixAction" value="%{'redirectAction without prefix'}" cssClass="btn" escapeHtmlBody="false" /> + <@s.submit action="redirectActionPrefixAction" value="%{'redirectAction without prefix'}" cssClass="btn" /> diff --git a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/methodPrefix.ftl b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/methodPrefix.ftl index b94bf6d88..e2cf0ee56 100644 --- a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/methodPrefix.ftl +++ b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/methodPrefix.ftl @@ -32,10 +32,10 @@

You have come to this page because you used an method prefix.

- +

The text you've enter is ${text!''}

- <@s.a href="javascript:history.back();" cssClass="btn btn-info" escapeHtmlBody="false"> Back + <@s.a href="javascript:history.back();" cssClass="btn btn-info"> Back

diff --git a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/normalSubmit.ftl b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/normalSubmit.ftl index 3052ff173..7df58271d 100644 --- a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/normalSubmit.ftl +++ b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/normalSubmit.ftl @@ -32,10 +32,10 @@

You have come to this page because you did a normal submit.

- +

The text you've enter is %{text}

- <@s.a href="javascript:history.back();" cssClass="btn btn-info" escapeHtmlBody="false"> Back + <@s.a href="javascript:history.back();" cssClass="btn btn-info"> Back

diff --git a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/redirectActionPrefix.ftl b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/redirectActionPrefix.ftl index 602f6bee7..93fee964c 100644 --- a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/redirectActionPrefix.ftl +++ b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/actionPrefix/redirectActionPrefix.ftl @@ -32,13 +32,13 @@

You have come to this page because you used an 'redirect-action' prefix.

- +

Because this is a redirect-action, the text will be lost, due to a redirection implies a new request being issued from the client.

The text you've enter is ${text!''}

- <@s.a href="javascript:history.back();" cssClass="btn btn-info" escapeHtmlBody="false"> Back + <@s.a href="javascript:history.back();" cssClass="btn btn-info"> Back

diff --git a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/appendIteratorTagDemoResult.jsp b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/appendIteratorTagDemoResult.jsp index c95de872d..c2c7ff3dd 100644 --- a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/appendIteratorTagDemoResult.jsp +++ b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/appendIteratorTagDemoResult.jsp @@ -46,7 +46,7 @@ - Back To Input + Back To Input diff --git a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/iteratorGeneratorTagDemoResult.jsp b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/iteratorGeneratorTagDemoResult.jsp index fefb0933e..f4a31d897 100644 --- a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/iteratorGeneratorTagDemoResult.jsp +++ b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/iteratorGeneratorTagDemoResult.jsp @@ -41,7 +41,7 @@ - Back To Input + Back To Input diff --git a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/mergeIteratorTagDemoResult.jsp b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/mergeIteratorTagDemoResult.jsp index 3ae67a590..1798da445 100644 --- a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/mergeIteratorTagDemoResult.jsp +++ b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/mergeIteratorTagDemoResult.jsp @@ -45,7 +45,7 @@ - Back To Input + Back To Input diff --git a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/subsetIteratorTagDemoResult.jsp b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/subsetIteratorTagDemoResult.jsp index fc89d5e28..e704e577d 100644 --- a/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/subsetIteratorTagDemoResult.jsp +++ b/apps/showcase/src/main/webapp/WEB-INF/tags/non-ui/iteratorTag/subsetIteratorTagDemoResult.jsp @@ -42,7 +42,7 @@ - Back To Input + Back To Input diff --git a/apps/showcase/src/main/webapp/WEB-INF/token/example4.ftl b/apps/showcase/src/main/webapp/WEB-INF/token/example4.ftl index e97fa0820..19dac0114 100644 --- a/apps/showcase/src/main/webapp/WEB-INF/token/example4.ftl +++ b/apps/showcase/src/main/webapp/WEB-INF/token/example4.ftl @@ -51,7 +51,7 @@ <@s.form action="transfer4"> <@s.token/> <@s.textfield label="Amount" name="amount" required=true value="400"/> - <@s.submit value="Transfer money" cssClass="btn btn-primary" escapeHtmlBody="false"/> + <@s.submit value="Transfer money" cssClass="btn btn-primary"/> diff --git a/core/src/main/java/org/apache/struts2/components/Submit.java b/core/src/main/java/org/apache/struts2/components/Submit.java index 870e8ad0b..7d13d3b85 100644 --- a/core/src/main/java/org/apache/struts2/components/Submit.java +++ b/core/src/main/java/org/apache/struts2/components/Submit.java @@ -75,7 +75,7 @@ public class Submit extends FormButton { value = "Submit"; } - if (((key != null)) && (value == null)) { + if ((key != null) && (value == null)) { this.value = "%{getText('"+key +"')}"; }