From effe6875b75ab91fd5b1b83bddd2929d421738f8 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Fri, 7 Jan 2022 10:07:13 +0100 Subject: [PATCH] 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();