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}");
