This is an automated email from the ASF dual-hosted git repository. lukaszlenart pushed a commit to branch WW-5022-escape-false in repository https://gitbox.apache.org/repos/asf/struts.git
The following commit(s) were added to refs/heads/WW-5022-escape-false by this push: new effe687 WW-5022 Pass escapeHtmlBody flag to JavaTemplates tags effe687 is described below commit effe6875b75ab91fd5b1b83bddd2929d421738f8 Author: Lukasz Lenart <lukaszlen...@apache.org> AuthorDate: Fri Jan 7 10:07:13 2022 +0100 WW-5022 Pass escapeHtmlBody flag to JavaTemplates tags --- .../java/org/apache/struts2/components/Anchor.java | 4 ++- .../java/org/apache/struts2/components/Submit.java | 7 +++-- core/src/site/resources/tags/a-attributes.html | 2 +- .../src/site/resources/tags/submit-attributes.html | 2 +- .../views/java/DefaultTagHandlerFactory.java | 13 ++++---- .../struts2/views/java/simple/AnchorHandler.java | 6 ++-- .../struts2/views/java/simple/SimpleTheme.java | 6 ++-- .../struts2/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 e00291d..ba9d84a 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 6a9ce97..870e8ad 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 e9cbb58..e9fd908 100644 --- a/core/src/site/resources/tags/a-attributes.html +++ b/core/src/site/resources/tags/a-attributes.html @@ -112,7 +112,7 @@ <tr> <td align="left" valign="top">escapeHtmlBody</td> <td align="left" valign="top">false</td> - <td align="left" valign="top">true</td> + <td align="left" valign="top">false</td> <td align="left" valign="top">false</td> <td align="left" valign="top">Boolean</td> <td align="left" valign="top">Specifies whether to HTML-escape the tag body or not</td> diff --git a/core/src/site/resources/tags/submit-attributes.html b/core/src/site/resources/tags/submit-attributes.html index 9f790b2..52ed55a 100644 --- a/core/src/site/resources/tags/submit-attributes.html +++ b/core/src/site/resources/tags/submit-attributes.html @@ -88,7 +88,7 @@ <tr> <td align="left" valign="top">escapeHtmlBody</td> <td align="left" valign="top">false</td> - <td align="left" valign="top">true</td> + <td align="left" valign="top">false</td> <td align="left" valign="top">false</td> <td align="left" valign="top">Boolean</td> <td align="left" valign="top">Specifies whether to HTML-escape the tag body or not</td> 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 4e356c3..4110320 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 12df246..405088f 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 adfc7f9..c65a21c 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<TagHandlerFactory> { + private static class FactoryList extends ArrayList<TagHandlerFactory> { 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 8207d7b..27a39d3 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<String, Object> 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 d727a74..58709a2 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("<i class='i-image'/>")); + + theme.renderTag(getTagName(), context); + theme.renderTag(getTagName() + "-close", context); + + String output = writer.getBuffer().toString(); + String expected = s("<a name='name_' id='name_' href='http://sometest.com?ab=10'><i class="i-image"/></a>"); + + 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("<i class='i-image'/>")); + + theme.renderTag(getTagName(), context); + theme.renderTag(getTagName() + "-close", context); + + String output = writer.getBuffer().toString(); + String expected = s("<a name='name_' id='name_' href='http://sometest.com?ab=10'><i class='i-image'/></a>"); + + assertEquals(expected, output); + } + @Override protected void setUp() throws Exception { super.setUp();