You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mb...@apache.org on 2007/01/27 16:50:39 UTC

svn commit: r500553 - in /myfaces/shared/trunk/core/src: main/java/org/apache/myfaces/shared/renderkit/RendererUtils.java test/java/org/apache/myfaces/shared/renderkit/ test/java/org/apache/myfaces/shared/renderkit/RendererUtilsTest.java

Author: mbr
Date: Sat Jan 27 07:50:39 2007
New Revision: 500553

URL: http://svn.apache.org/viewvc?view=rev&rev=500553
Log:
fixed - issue MYFACES-731: selectManyListbox calls converter getAsString passing in string value during form post 
http://issues.apache.org/jira/browse/MYFACES-731

Added:
    myfaces/shared/trunk/core/src/test/java/org/apache/myfaces/shared/renderkit/
    myfaces/shared/trunk/core/src/test/java/org/apache/myfaces/shared/renderkit/RendererUtilsTest.java   (with props)
Modified:
    myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/RendererUtils.java

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/RendererUtils.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/RendererUtils.java?view=diff&rev=500553&r1=500552&r2=500553
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/RendererUtils.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/RendererUtils.java Sat Jan 27 07:50:39 2007
@@ -18,11 +18,19 @@
  */
 package org.apache.myfaces.shared.renderkit;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.myfaces.shared.renderkit.html.util.FormInfo;
-import org.apache.myfaces.shared.util.HashMapUtils;
-import org.apache.myfaces.shared.util.SelectItemsIterator;
+import java.io.ByteArrayOutputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
 
 import javax.faces.FacesException;
 import javax.faces.component.EditableValueHolder;
@@ -44,25 +52,19 @@
 import javax.faces.el.ValueBinding;
 import javax.faces.event.PhaseId;
 import javax.faces.model.SelectItem;
-import java.io.ByteArrayOutputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Serializable;
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.shared.renderkit.html.util.FormInfo;
+import org.apache.myfaces.shared.util.HashMapUtils;
+import org.apache.myfaces.shared.util.SelectItemsIterator;
 
 /**
  * @author Manfred Geiler (latest modification by $Author$)
  * @version $Revision$ $Date$
  */
 public final class RendererUtils {
+
     private RendererUtils() {
         //nope
     }
@@ -467,6 +469,10 @@
         if (submittedValues == null) {
             return null;
         }
+        
+        if(converter != null) {
+            converter = new PassThroughAsStringConverter(converter);
+        }
 
         return internalSubmittedOrSelectedValuesAsSet(context, component, converter, uiSelectMany, submittedValues);
     }
@@ -934,4 +940,33 @@
             TRINIDAD_FORM_COMPONENT_FAMILY.equals(component.getFamily());
     }
 
+
+    /**
+     * Special converter for handling submitted values which don't need to be converted. 
+     * 
+     * @author mathias (latest modification by $Author$)
+     * @version $Revision$ $Date$
+     */
+    private static class PassThroughAsStringConverter implements Converter
+    {
+        private final Converter converter;
+
+        public PassThroughAsStringConverter(Converter converter)
+        {
+            this.converter = converter;
+        }
+
+        public Object getAsObject(FacesContext context, UIComponent component,
+                String value) throws ConverterException
+        {
+            return converter.getAsObject(context, component, value);
+        }
+
+        public String getAsString(FacesContext context, UIComponent component,
+                Object value) throws ConverterException
+        {
+            return (String)value;
+        }
+
+    }
 }

Added: myfaces/shared/trunk/core/src/test/java/org/apache/myfaces/shared/renderkit/RendererUtilsTest.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/test/java/org/apache/myfaces/shared/renderkit/RendererUtilsTest.java?view=auto&rev=500553
==============================================================================
--- myfaces/shared/trunk/core/src/test/java/org/apache/myfaces/shared/renderkit/RendererUtilsTest.java (added)
+++ myfaces/shared/trunk/core/src/test/java/org/apache/myfaces/shared/renderkit/RendererUtilsTest.java Sat Jan 27 07:50:39 2007
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.myfaces.shared.renderkit;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UISelectMany;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
+
+import junit.framework.TestCase;
+
+import org.apache.shale.test.mock.MockFacesContext;
+
+/**
+ * @author Mathias Broekelmann (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+public class RendererUtilsTest extends TestCase
+{
+    /**
+     * test for MYFACES-731
+     * A converter getAsString method should not be called for submitted values 
+     * @throws Exception
+     */
+    public void testGetSubmittedValuesAsSet() throws Exception
+    {
+        MockFacesContext ctx = new MockFacesContext();
+        UISelectMany cmp = new UISelectMany();
+        cmp.setSubmittedValue(new String[] {"testValue"});
+        Converter testConverter = new Converter()
+        {
+            public Object getAsObject(FacesContext context,
+                    UIComponent component, String value)
+                    throws ConverterException
+            {
+                fail("getAsObject should not get called");
+                throw new UnsupportedOperationException();
+            }
+
+            public String getAsString(FacesContext context,
+                    UIComponent component, Object value)
+                    throws ConverterException
+            {
+                fail("getAsString should not get called");
+                throw new UnsupportedOperationException();
+            }
+        };
+        RendererUtils.getSubmittedValuesAsSet(ctx, cmp, testConverter, cmp);
+    }
+}

Propchange: myfaces/shared/trunk/core/src/test/java/org/apache/myfaces/shared/renderkit/RendererUtilsTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/shared/trunk/core/src/test/java/org/apache/myfaces/shared/renderkit/RendererUtilsTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL