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();