WW-5168 Support submit unchecked in Javatemplates and fixes logic for all FTL template

This commit is contained in:
Lukasz Lenart
2022-02-09 17:33:46 +01:00
parent f0b24d17da
commit b1e9eae01c
3 changed files with 43 additions and 18 deletions
@@ -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);
}
@@ -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");
}
}
}
@@ -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}");