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'>&lt;i class=&quot;i-image&quot;/&gt;</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();

Reply via email to