Author: mrdon
Date: Sun Sep 10 22:36:37 2006
New Revision: 442105

URL: http://svn.apache.org/viewvc?view=rev&rev=442105
Log:
Forgot to add the actual checkbox interceptor :)
WW-992

Added:
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/CheckboxInterceptor.java

Added: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/CheckboxInterceptor.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/CheckboxInterceptor.java?view=auto&rev=442105
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/CheckboxInterceptor.java
 (added)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/CheckboxInterceptor.java
 Sun Sep 10 22:36:37 2006
@@ -0,0 +1,81 @@
+/*
+ * $Id: CheckboxListTest.java 439747 2006-09-03 09:22:46Z mrdon $
+ *
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.struts2.interceptor;
+
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.interceptor.Interceptor;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.HashMap;
+import java.util.Iterator;
+
+/**
+ * Looks for a hidden identification field that specifies the original value 
of the checkbox.
+ * If the checkbox isn't submitted, insert it into the parameters as if it was 
with the value 
+ * of 'false'.
+ * 
+ * The default value of an unchecked box can be overridden by setting the 
'uncheckedValue' property.
+ */
+public class CheckboxInterceptor implements Interceptor {
+    
+    /** Auto-generated serialization id */
+    private static final long serialVersionUID = -586878104807229585L;
+    
+    private String uncheckedValue = Boolean.FALSE.toString();
+
+    public void destroy() {
+    }
+
+    public void init() {
+    }
+
+    public String intercept(ActionInvocation ai) throws Exception {
+        Map parameters = ai.getInvocationContext().getParameters();
+        Map<String, String> newParams = new HashMap<String, String>();
+        Set<String> keys = parameters.keySet();
+        for (Iterator<String> iterator = keys.iterator(); iterator.hasNext();) 
{
+            String key = iterator.next();
+
+            if (key.startsWith("__checkbox_")) {
+                String name = key.substring("__checkbox_".length());
+
+                iterator.remove();
+
+                // is this checkbox checked/submitted?
+                if (!parameters.containsKey(name)) {
+                    // if not, let's be sure to default the value to false
+                    newParams.put(name, uncheckedValue);
+                }
+            }
+        }
+
+        parameters.putAll(newParams);
+
+        return ai.invoke();
+    }
+
+    /**
+     * Overrides the default value for an unchecked checkbox
+     * 
+     * @param uncheckedValue The uncheckedValue to set
+     */
+    public void setUncheckedValue(String uncheckedValue) {
+        this.uncheckedValue = uncheckedValue;
+    }
+}


Reply via email to