diff --git a/org.springframework.context/src/main/java/org/springframework/ui/binding/Binder.java b/org.springframework.context/src/main/java/org/springframework/ui/binding/Binder.java index 158d6de3a2..ad17f0dad1 100644 --- a/org.springframework.context/src/main/java/org/springframework/ui/binding/Binder.java +++ b/org.springframework.context/src/main/java/org/springframework/ui/binding/Binder.java @@ -120,10 +120,11 @@ public class Binder { .entrySet()) { Binding binding = getBinding(entry.getKey()); Object value = entry.getValue(); - if (value instanceof String[]) { - binding.setValues((String[])value); - } else if (value instanceof String) { + if (value instanceof String) { binding.setValue((String)entry.getValue()); + } + else if (value instanceof String[]) { + binding.setValues((String[])value); } else { throw new IllegalArgumentException("Illegal argument " + value); } diff --git a/org.springframework.context/src/test/java/org/springframework/ui/binding/BinderTests.java b/org.springframework.context/src/test/java/org/springframework/ui/binding/BinderTests.java index b1bee3b919..49f2c93b5d 100644 --- a/org.springframework.context/src/test/java/org/springframework/ui/binding/BinderTests.java +++ b/org.springframework.context/src/test/java/org/springframework/ui/binding/BinderTests.java @@ -23,6 +23,7 @@ import org.junit.Test; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.ui.format.DateFormatter; import org.springframework.ui.format.number.CurrencyFormatter; +import org.springframework.ui.format.number.IntegerFormatter; public class BinderTests { @@ -135,6 +136,16 @@ public class BinderTests { assertEquals("$23.56", b.getValue()); } + @Test + public void getBindingCustomFormatterRequiringTypeCoersion() { + Binder binder = new Binder(new TestBean()); + // IntegerFormatter formats Longs, so conversion from Integer -> Long is performed + binder.add(new BindingConfiguration("integer", new IntegerFormatter())); + Binding b = binder.getBinding("integer"); + b.setValue("2,300"); + assertEquals("2,300", b.getValue()); + } + @Test public void getBindingMultiValued() { Binder binder = new Binder(new TestBean()); @@ -204,7 +215,7 @@ public class BinderTests { Binding b = binder.getBinding("currency"); assertEquals("$5.00", b.format(new BigDecimal("5"))); } - + public static enum FooEnum { BAR, BAZ, BOOP; }