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

Ned Collyer updated WW-992:
---------------------------

    Component/s: Views
                 Interceptors
                 Actions
     Issue Type: Bug  (was: Improvement)

This has not been fixed for checkboxlist.ftl - see svn changelist through jira 
- u can see it has not been touched

The checkboxlist does not use the checkbox tag.

I have tried unsuccessfully fixing just the checkboxlist.ftl file, but it 
appears to be a little more complicated than an individual checkbox.

> 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: Actions, Interceptors, Views
>    Affects Versions: WW 2.1.7
>         Environment: N/A
>            Reporter: Peter Molettiere
>            Assignee: Don Brown
>             Fix For: 2.0.0
>
>
> 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