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; + } +}