[
https://issues.apache.org/jira/browse/WW-5145?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17617759#comment-17617759
]
nikos dimitrakas commented on WW-5145:
--------------------------------------
Using s:checkboxlist does not give you the same freedom with layout. And even
if s:checkboxlist would be an alternative in many cases, it does not motivate
not fixing the behaviour of s:checkbox. The combination of "Won't fix" and Fix
version "6.1.0" is a bit confusing.
> Checkbox with multiple values do not default correctly
> ------------------------------------------------------
>
> Key: WW-5145
> URL: https://issues.apache.org/jira/browse/WW-5145
> Project: Struts 2
> Issue Type: Bug
> Components: Core Tags
> Affects Versions: 2.5.25
> Reporter: nikos dimitrakas
> Priority: Minor
> Labels: checkbox
> Fix For: 6.1.0
>
>
> Using multiple s:checkbox (with the same name) together with a List (of
> Integer or String, etc) does not preselect the right checkboxes. This
> behaviour is inconsistent with all the other form components that get the
> default values based on their name. I have constructed a simple example for
> illustrating and testing. My actual case is more complex with dynamic data.
> Action class:
> {code:java}
> public class TestAction extends ActionSupport {
> private List<Integer> number;
>
> public List<Integer> getNumber() {
> return number;
> }
>
> public void setNumber(List<Integer> number) {
> this.number = number;
> }
> public String execute() {
> //Try with some default, empty list, null
> if (number == null) number = Collections.singletonList(2);
> return SUCCESS;
> }
> }
> {code}
> JSP:
> {code:html}
> <%@ taglib prefix="s" uri="/struts-tags_rt" %>
> <html>
> <body>
> <s:form action="test">
> 1 <s:checkbox name="number" fieldValue="1"/>
> 2 <s:checkbox name="number" fieldValue="2"/>
> 3 <s:checkbox name="number" fieldValue="3"/>
> 4 <s:checkbox name="number" fieldValue="4"/>
> <button type="submit">Push</button>
> </s:form>
> </body>
> </html>
> {code}
> Action configuration:
> {code:xml}
> <action name="test" class="TestAction" method="execute">
> <result name="success">test.jsp</result>
> </action>
> {code}
> One would expect that the checkboxes should be checked if the corresponding
> value is in the list. But instead all checkboxes get checked if the list is
> not null (independent of its content). And all checkboxes are unchecked if
> the list is null. Submitting the form after selecting some checkboxes does
> send the values correctly to the action, but once again when rendering the
> checkboxes, they all get checked if the list is not null.
> I can simply fix this by adding the value attribute with an expression to
> each checkbox, but it feels like this should be the default behaviour:
> {code}
> 1 <s:checkbox name="number" fieldValue="1" value="number.contains(1)"/>
> 2 <s:checkbox name="number" fieldValue="2" value="number.contains(2)"/>
> 3 <s:checkbox name="number" fieldValue="3" value="number.contains(3)"/>
> 4 <s:checkbox name="number" fieldValue="4" value="number.contains(4)"/>
> {code}
> Another workaround is to use a Map<Integer, Boolean> and in that case all
> checkboxes are checked and unchecked correctly, but it feels unnecessary
> since every entry will always have value true and the only interesting part
> of the map will be the keySet (which is essentially the list). But it is
> interesting that the checkboxes behave as expected when using a Map, but not
> when using a List.
> I am not really sure if this relates to WW-4865
--
This message was sent by Atlassian Jira
(v8.20.10#820010)