1.1 --- a/json-beans/src/main/java/net/java/html/beans/JSONBeans.java Mon Aug 04 06:21:37 2014 +0200
1.2 +++ b/json-beans/src/main/java/net/java/html/beans/JSONBeans.java Mon Aug 04 06:51:19 2014 +0200
1.3 @@ -138,7 +138,7 @@
1.4 try {
1.5 try {
1.6 final Method m = properties[index].getWriteMethod();
1.7 - value = extractValue(m.getParameterTypes()[0], value);
1.8 + value = extractValue(toBoxed(m.getParameterTypes()[0]), value);
1.9 m.invoke(model, value);
1.10 } catch (InvocationTargetException ex) {
1.11 throw ex.getCause();
1.12 @@ -222,6 +222,36 @@
1.13 }
1.14 return p;
1.15 }
1.16 + private static Class<?> toBoxed(Class<?> c) {
1.17 + if (!c.isPrimitive()) {
1.18 + return c;
1.19 + }
1.20 + if (c == Boolean.TYPE) {
1.21 + return Boolean.class;
1.22 + }
1.23 + if (c == Byte.TYPE) {
1.24 + return Byte.class;
1.25 + }
1.26 + if (c == Short.TYPE) {
1.27 + return Short.class;
1.28 + }
1.29 + if (c == Integer.TYPE) {
1.30 + return Integer.class;
1.31 + }
1.32 + if (c == Long.TYPE) {
1.33 + return Long.class;
1.34 + }
1.35 + if (c == Float.TYPE) {
1.36 + return Float.class;
1.37 + }
1.38 + if (c == Double.TYPE) {
1.39 + return Double.class;
1.40 + }
1.41 + if (c == Character.TYPE) {
1.42 + return Character.class;
1.43 + }
1.44 + return c;
1.45 + }
1.46 }
1.47
1.48 private static final class BeanRef
2.1 --- a/json-beans/src/test/java/net/java/html/beans/MapModelTest.java Mon Aug 04 06:21:37 2014 +0200
2.2 +++ b/json-beans/src/test/java/net/java/html/beans/MapModelTest.java Mon Aug 04 06:51:19 2014 +0200
2.3 @@ -142,6 +142,22 @@
2.4 assertEquals(p.getSex(), Sex.FEMALE, "Changed to female");
2.5 }
2.6
2.7 + @Test public void canSetBoolean() throws Exception {
2.8 + Person p = Models.bind(new Person(), c);
2.9 + p.setFirstName("Jirka");
2.10 + p.setGood(true);
2.11 +
2.12 + Map m = (Map)Models.toRaw(p);
2.13 + Object v = m.get("good");
2.14 + assertNotNull(v, "Value should be in the map");
2.15 + assertEquals(v.getClass(), One.class, "It is instance of One");
2.16 + One o = (One)v;
2.17 +
2.18 + o.set(false);
2.19 +
2.20 + assertFalse(p.isGood(), "No longer good");
2.21 + }
2.22 +
2.23 @Test public void derivedProperty() throws Exception {
2.24 Person p = Models.bind(new Person(), c);
2.25
3.1 --- a/json-beans/src/test/java/net/java/html/beans/Person.java Mon Aug 04 06:21:37 2014 +0200
3.2 +++ b/json-beans/src/test/java/net/java/html/beans/Person.java Mon Aug 04 06:51:19 2014 +0200
3.3 @@ -54,11 +54,13 @@
3.4 private String firstName;
3.5 private String lastName;
3.6 private Sex sex;
3.7 + private boolean good;
3.8
3.9 public static final String PROP_FIRSTNAME = "firstName";
3.10 public static final String PROP_LASTNAME = "lastName";
3.11 public static final String PROP_FULLNAME = "fullName";
3.12 public static final String PROP_SEX = "sex";
3.13 + public static final String PROP_GOOD = "good";
3.14
3.15 public Person() {
3.16 }
3.17 @@ -91,6 +93,16 @@
3.18 }
3.19 }
3.20
3.21 + public boolean isGood() {
3.22 + return good;
3.23 + }
3.24 +
3.25 + public void setGood(boolean good) {
3.26 + boolean oldGood = this.good;
3.27 + this.good = good;
3.28 + propertyChangeSupport.firePropertyChange(PROP_GOOD, oldGood, good);
3.29 + }
3.30 +
3.31 public String getFirstName() {
3.32 return firstName;
3.33 }