This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch WW-5168-submit-unchecked
in repository https://gitbox.apache.org/repos/asf/struts.git

commit b1e9eae01ca9a33f597a952fd9944f01c68f0f66
Author: Lukasz Lenart <[email protected]>
AuthorDate: Wed Feb 9 17:33:46 2022 +0100

    WW-5168 Support submit unchecked in Javatemplates and fixes logic for all 
FTL template
---
 .../org/apache/struts2/components/Checkbox.java    |  3 +-
 .../struts2/views/java/simple/CheckboxHandler.java | 39 ++++++++++++----------
 .../struts2/views/java/simple/CheckboxTest.java    | 19 +++++++++++
 3 files changed, 43 insertions(+), 18 deletions(-)

diff --git a/core/src/main/java/org/apache/struts2/components/Checkbox.java 
b/core/src/main/java/org/apache/struts2/components/Checkbox.java
index 591f425..dd853ca 100644
--- a/core/src/main/java/org/apache/struts2/components/Checkbox.java
+++ b/core/src/main/java/org/apache/struts2/components/Checkbox.java
@@ -75,7 +75,8 @@ public class Checkbox extends UIBean {
         }
 
         if (submitUnchecked != null) {
-            addParameter("submitUnchecked", findValue(submitUnchecked, 
Boolean.class));
+            Object parsedValue = findValue(submitUnchecked, Boolean.class);
+            addParameter("submitUnchecked", parsedValue == null ? 
Boolean.valueOf(submitUnchecked) : parsedValue);
         } else {
             addParameter("submitUnchecked", false);
         }
diff --git 
a/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/CheckboxHandler.java
 
b/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/CheckboxHandler.java
index c712dda..6f0e965 100644
--- 
a/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/CheckboxHandler.java
+++ 
b/plugins/javatemplates/src/main/java/org/apache/struts2/views/java/simple/CheckboxHandler.java
@@ -18,13 +18,14 @@
  */
 package org.apache.struts2.views.java.simple;
 
-import org.apache.struts2.views.java.Attributes;
-import org.apache.struts2.views.java.TagGenerator;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.text.StringEscapeUtils;
+import org.apache.struts2.views.java.Attributes;
+import org.apache.struts2.views.java.TagGenerator;
 
 import java.io.IOException;
 import java.util.Map;
+import java.util.Objects;
 
 public class CheckboxHandler extends AbstractTagHandler implements 
TagGenerator {
     public void generate() throws IOException {
@@ -35,29 +36,33 @@ public class CheckboxHandler extends AbstractTagHandler 
implements TagGenerator
         String id = (String) params.get("id");
         String name = (String) params.get("name");
         Object disabled = params.get("disabled");
+        boolean submitUnchecked = 
Boolean.parseBoolean(Objects.toString(params.get("submitUnchecked"), "false"));
 
         attrs.add("type", "checkbox")
-                .add("name", name)
-                .add("value", fieldValue)
-                .addIfTrue("checked", params.get("nameValue"))
-                .addIfTrue("readonly", params.get("readonly"))
-                .addIfTrue("disabled", disabled)
-                .addIfExists("tabindex", params.get("tabindex"))
-                .addIfExists("id", id)
-                .addIfExists("class", params.get("cssClass"))
-                .addIfExists("style", params.get("cssStyle"))
-                .addIfExists("title", params.get("title"));
+            .add("name", name)
+            .add("value", fieldValue)
+            .addIfTrue("checked", params.get("nameValue"))
+            .addIfTrue("readonly", params.get("readonly"))
+            .addIfTrue("disabled", disabled)
+            .addIfExists("tabindex", params.get("tabindex"))
+            .addIfExists("id", id)
+            .addIfExists("class", params.get("cssClass"))
+            .addIfExists("style", params.get("cssStyle"))
+            .addIfExists("title", params.get("title"));
         start("input", attrs);
         end("input");
 
-        //hidden input
-        attrs = new Attributes();
-        attrs.add("type", "hidden")
+        if (!submitUnchecked) {
+            //hidden input
+            attrs = new Attributes();
+
+            attrs.add("type", "hidden")
                 .add("id", "__checkbox_" + 
StringUtils.defaultString(StringEscapeUtils.escapeHtml4(id)))
                 .add("name", "__checkbox_" + 
StringUtils.defaultString(StringEscapeUtils.escapeHtml4(name)))
                 .add("value", "__checkbox_" + 
StringUtils.defaultString(StringEscapeUtils.escapeHtml4(fieldValue)))
                 .addIfTrue("disabled", disabled);
-        start("input", attrs);
-        end("input");
+            start("input", attrs);
+            end("input");
+        }
     }
 }
diff --git 
a/plugins/javatemplates/src/test/java/org/apache/struts2/views/java/simple/CheckboxTest.java
 
b/plugins/javatemplates/src/test/java/org/apache/struts2/views/java/simple/CheckboxTest.java
index 10a8e36..fa7d53a 100644
--- 
a/plugins/javatemplates/src/test/java/org/apache/struts2/views/java/simple/CheckboxTest.java
+++ 
b/plugins/javatemplates/src/test/java/org/apache/struts2/views/java/simple/CheckboxTest.java
@@ -45,6 +45,25 @@ public class CheckboxTest extends 
AbstractCommonAttributesTest {
         assertEquals(expected, output);
     }
 
+    public void testRenderUncheckCheckbox() {
+        tag.setName("name_");
+        tag.setDisabled("true");
+        tag.setTabindex("1");
+        tag.setId("id_");
+        tag.setCssClass("class");
+        tag.setCssStyle("style");
+        tag.setTitle("title");
+        tag.setFieldValue("xyz");
+        tag.setSubmitUnchecked("true");
+
+        tag.evaluateParams();
+        map.putAll(tag.getParameters());
+        theme.renderTag(getTagName(), context);
+        String output = writer.getBuffer().toString();
+        String expected = s("<input type='checkbox' name='name_' value='xyz' 
tabindex='1' id='id_' class='class' style='style' title='title'></input>");
+        assertEquals(expected, output);
+    }
+
     public void testRenderCheckboxWithNameValue() {
         tag.setName("name_");
         tag.setValue("%{someValue}");

Reply via email to