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 @@
- - Home
+ - Home
-
Configuration
@@ -239,7 +239,7 @@
- Person Manager
- CRUD
- - Execute & Wait
+ - Execute & Wait
- Token
- Model Driven
diff --git a/apps/showcase/src/main/webapp/WEB-INF/filedownload/index.jsp b/apps/showcase/src/main/webapp/WEB-INF/filedownload/index.jsp
index 07afedf63..ac1082d20 100644
--- a/apps/showcase/src/main/webapp/WEB-INF/filedownload/index.jsp
+++ b/apps/showcase/src/main/webapp/WEB-INF/filedownload/index.jsp
@@ -39,7 +39,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" />
#if>
- <@s.a href="%{#startHref}" escapeHtmlBody="false">
+ <@s.a href="%{#startHref}">
" width="250" height="43" />
@s.a>
<#else>
@@ -139,7 +139,7 @@
<@s.a href="%{#url}"
id="%{#currentCharacter}"
- escapeHtmlBody="false"
+
>
" width="36" border="0" />
@s.a>
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"/>
@s.form>
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>
+ <@s.a href="javascript:history.back();" cssClass="btn btn-info"> Back@s.a>
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" />
@s.form>
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>
+ <@s.a href="javascript:history.back();" cssClass="btn btn-info">
Back@s.a>
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>
+ <@s.a href="javascript:history.back();" cssClass="btn btn-info">
Back@s.a>
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>
+ <@s.a href="javascript:history.back();" cssClass="btn btn-info">
Back@s.a>
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"/>
@s.form>
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
+
+
+
+
+
+
+
+
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();