[ 
https://issues.apache.org/struts/browse/WW-992?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_42731
 ] 

Dave Newton commented on WW-992:
--------------------------------

That's correct; I actually just noticed this two days ago and have an iGTD note 
about it :/

Also, should the fix version be 2.1.1?

> Fixes broken checkbox and checkboxlist implementation.
> ------------------------------------------------------
>
>                 Key: WW-992
>                 URL: https://issues.apache.org/struts/browse/WW-992
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Core Actions, Core Interceptors, Plugin - Tags
>    Affects Versions: WW 2.1.7
>         Environment: N/A
>            Reporter: Peter Molettiere
>             Fix For: 2.0.1
>
>
> Checkbox handling is broken in webwork, since html checkboxes result in no 
> parameter being sent with the form submission. The parameters interceptor has 
> no way to see the missing checkbox fields, and so never unchecks things with 
> "true" as default, and will not empty a list when a checkboxlist with nothing 
> is selected is submitted.
> This fixes the issue.
> This will make your checkboxes and checkbox lists always set the appropriate 
> values on your model, regardless of whether the checkbox is selected or not. 
> Use the interceptor below in place of the default ParametersInterceptor, and 
> insert this line at the beginning of the checkbox.ftl and checkboxlist.ftl 
> templates:
> <input type="hidden" id="WebWork-checkboxExists" 
> name="${parameters.name?html}" value="${parameters.fieldValue?html}"/>
> Here's the interceptor, written as a subclass of ParametersInterceptor. This 
> could be rolled into ParametersInterceptor.
> import com.opensymphony.xwork.interceptor.ParameterNameAware;
> import com.opensymphony.xwork.interceptor.ParametersInterceptor;
> import com.opensymphony.xwork.util.OgnlValueStack;
> import java.util.Iterator;
> import java.util.Map;
> import java.util.TreeMap;
> public class CheckboxParameterInterceptor extends ParametersInterceptor {
>     protected void setParameters(Object action, OgnlValueStack stack, final 
> Map parameters) {
>         ParameterNameAware parameterNameAware = (action instanceof 
> ParameterNameAware)
>                 ? (ParameterNameAware) action : null;
>         for (Iterator iterator = (new 
> TreeMap(parameters)).entrySet().iterator(); iterator.hasNext();) {
>             Map.Entry entry = (Map.Entry) iterator.next();
>             String name = entry.getKey().toString();
>             boolean acceptableName = acceptableName(name)
>                     && (parameterNameAware == null
>                     || parameterNameAware.acceptableParameterName(name));
>             if (acceptableName) {
>                 Object value = entry.getValue();
>                 if (name.startsWith("WebWork-checkboxExists")) {
>                     String[] checkboxes = (String[]) value;
>                     for (int i = 0; i < checkboxes.length; i++) {
>                         String checkbox = checkboxes[i];
>                         if (! parameters.containsKey(checkbox)) {
>                             stack.setValue(checkbox, new String[0]);
>                         }
>                     }
>                 }
>                 stack.setValue(name, value);
>             }
>         }
>     }
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to