You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/12/04 01:54:29 UTC

git commit: ISIS-621: improvements to numeric panel converters

Updated Branches:
  refs/heads/master 57784e537 -> 48c9e60b0


ISIS-621: improvements to numeric panel converters


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/48c9e60b
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/48c9e60b
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/48c9e60b

Branch: refs/heads/master
Commit: 48c9e60b0b3a7ae4715325e7f856e77929fe28e5
Parents: 57784e5
Author: Dan Haywood <da...@apache.org>
Authored: Wed Dec 4 00:54:16 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Wed Dec 4 00:54:16 2013 +0000

----------------------------------------------------------------------
 .../scalars/DateConverterAbstract.java          |  6 +-
 .../jdkdates/DateConverterForJavaSqlDate.java   | 15 +++--
 .../jdkdates/DateConverterForJavaUtilDate.java  | 24 ++++---
 .../scalars/jdkmath/BigDecimalConverter.java    | 48 --------------
 .../scalars/jdkmath/BigDecimalTextField.java    | 48 --------------
 .../jdkmath/JavaMathBigDecimalPanel.java        | 68 ++++++++++++++++++--
 .../jdkmath/JavaMathBigDecimalPanelFactory.java |  8 ++-
 .../jdkmath/JavaMathBigIntegerPanel.java        | 21 +-----
 .../jdkmath/JavaMathBigIntegerPanelFactory.java | 52 +++++++++++++++
 .../jodatime/DateConverterForJodaDateTime.java  | 14 ++--
 .../jodatime/DateConverterForJodaLocalDate.java | 15 +++--
 .../DateConverterForJodaLocalDateTime.java      | 15 ++++-
 .../components/scalars/primitive/BytePanel.java | 18 ++++++
 .../scalars/primitive/CharacterPanel.java       |  5 --
 .../scalars/primitive/DoublePanel.java          | 20 ++++++
 .../scalars/primitive/FloatPanel.java           | 20 ++++++
 .../scalars/primitive/IntegerPanel.java         | 19 ++++++
 .../components/scalars/primitive/LongPanel.java | 19 ++++++
 .../scalars/primitive/ShortPanel.java           | 19 ++++++
 .../jdkmath/BigDecimalConverterTest.java        | 13 ++--
 20 files changed, 309 insertions(+), 158 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverterAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverterAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverterAbstract.java
index ca160d0..1c6ed99 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverterAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/DateConverterAbstract.java
@@ -20,6 +20,8 @@ package org.apache.isis.viewer.wicket.ui.components.scalars;
 
 import java.util.Locale;
 
+import org.apache.wicket.util.convert.ConversionException;
+
 
 public abstract class DateConverterAbstract<T> implements DateConverter<T> {
     
@@ -61,7 +63,7 @@ public abstract class DateConverterAbstract<T> implements DateConverter<T> {
     }
     
     @Override
-    public T convertToObject(String value, Locale locale) {
+    public T convertToObject(String value, Locale locale) throws ConversionException {
         return value != null? doConvertToObject(value, locale): null;
     }
     @Override
@@ -69,6 +71,6 @@ public abstract class DateConverterAbstract<T> implements DateConverter<T> {
         return value != null? doConvertToString(value, locale): null;
     }
 
-    protected abstract T doConvertToObject(String value, Locale locale);
+    protected abstract T doConvertToObject(String value, Locale locale) throws ConversionException;
     protected abstract String doConvertToString(T value, Locale locale);
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlDate.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlDate.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlDate.java
index a4c6791..1e7554a 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlDate.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaSqlDate.java
@@ -23,6 +23,8 @@ import java.util.Calendar;
 import java.util.Date;
 import java.util.Locale;
 
+import org.apache.wicket.util.convert.ConversionException;
+
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 
 
@@ -38,12 +40,17 @@ public class DateConverterForJavaSqlDate extends DateConverterForJavaAbstract<ja
     }
 
     @Override
-    protected java.sql.Date doConvertToObject(String value, Locale locale) {
+    protected java.sql.Date doConvertToObject(String value, Locale locale) throws ConversionException {
+        final Date date = convert(value);
+        final java.util.Date adjustedDate = addDays(date, 0-adjustBy);
+        return new java.sql.Date(adjustedDate.getTime());
+    }
+
+    private java.util.Date convert(String value) {
         try {
-            final java.util.Date parsedJavaUtilDate = addDays(newSimpleDateFormatUsingDatePattern().parse(value), 0-adjustBy);
-            return new java.sql.Date(parsedJavaUtilDate.getTime());
+            return newSimpleDateFormatUsingDatePattern().parse(value);
         } catch (ParseException e) {
-            return null;
+            throw new ConversionException("Cannot convert into a date", e);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaUtilDate.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaUtilDate.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaUtilDate.java
index 51805be..e85fff8 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaUtilDate.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkdates/DateConverterForJavaUtilDate.java
@@ -23,6 +23,8 @@ import java.util.Calendar;
 import java.util.Date;
 import java.util.Locale;
 
+import org.apache.wicket.util.convert.ConversionException;
+
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 
 
@@ -38,21 +40,27 @@ public class DateConverterForJavaUtilDate extends DateConverterForJavaAbstract<j
     
 
     @Override
-    protected java.util.Date doConvertToObject(String value, Locale locale) {
+    protected java.util.Date doConvertToObject(String value, Locale locale) throws ConversionException {
+        final Date date = convert(value);
+        final Date adjustedDate = addDays(date, 0-adjustBy);
+        return adjustedDate;
+    }
+    private java.util.Date convert(String valueStr) {
         try {
-            return addDays(newSimpleDateFormatUsingDateTimePattern().parse(value), 0-adjustBy);
-        } catch (ParseException e) {
+            return newSimpleDateFormatUsingDateTimePattern().parse(valueStr);
+        } catch (ParseException ex) {
             try {
-                return addDays(newSimpleDateFormatUsingDatePattern().parse(value), 0-adjustBy);
-            } catch (ParseException ex) {
-                return null;
+                return newSimpleDateFormatUsingDatePattern().parse(valueStr);
+            } catch (ParseException ex2) {
+                throw new ConversionException("Value cannot be converted as a date/time", ex);
             }
         }
     }
 
     @Override
-    protected String doConvertToString(java.util.Date value, Locale locale) {
-        return newSimpleDateFormatUsingDateTimePattern().format(addDays(value, adjustBy));
+    protected String doConvertToString(java.util.Date value, Locale locale) throws ConversionException {
+        final Date adjustedDate = addDays(value, adjustBy);
+        return newSimpleDateFormatUsingDateTimePattern().format(adjustedDate);
     }
 
     private static Date addDays(java.util.Date value, final int days) {

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter.java
deleted file mode 100644
index 5bec427..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverter.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *  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.isis.viewer.wicket.ui.components.scalars.jdkmath;
-
-import java.math.BigDecimal;
-import java.util.Locale;
-
-import org.apache.wicket.util.convert.IConverter;
-
-final class BigDecimalConverter implements IConverter<BigDecimal> {
-    private final Integer scale;
-    private static final long serialVersionUID = 1L;
-
-    BigDecimalConverter(Integer scale) {
-        this.scale = scale;
-    }
-
-    @Override
-    public BigDecimal convertToObject(String valueStr, Locale locale) {
-        try {
-            final BigDecimal value = new BigDecimal(valueStr);
-            return scale != null? value.setScale(scale): value;
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    @Override
-    public String convertToString(BigDecimal value, Locale locale) {
-        return value.toPlainString();
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalTextField.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalTextField.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalTextField.java
deleted file mode 100644
index 58f7a02..0000000
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalTextField.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *  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.isis.viewer.wicket.ui.components.scalars.jdkmath;
-
-import java.math.BigDecimal;
-
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.util.convert.IConverter;
-
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-
-final class BigDecimalTextField extends TextField<BigDecimal> {
-    
-        private final ScalarModel model;
-        private static final long serialVersionUID = 1L;
-
-        BigDecimalTextField(String id, IModel<BigDecimal> model, Class<BigDecimal> type, ScalarModel model2) {
-            super(id, model, type);
-            this.model = model2;
-        }
-
-        @SuppressWarnings("unchecked")
-        @Override
-        public <C> IConverter<C> getConverter(Class<C> type) {
-
-            final Integer scale = model.getScale();
-            return type == BigDecimal.class 
-                    ? (IConverter<C>) new BigDecimalConverter(scale) 
-                    : super.getConverter(type);
-        }
-    }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
index 5096f44..144b624 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
@@ -20,8 +20,11 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath;
 
 import java.math.BigDecimal;
+import java.util.Locale;
 
 import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.util.convert.IConverter;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
@@ -32,21 +35,72 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldN
 public class JavaMathBigDecimalPanel extends ScalarPanelTextFieldNumeric<BigDecimal> {
 
     private static final long serialVersionUID = 1L;
+    
+    private final IConverter<BigDecimal> threadSafeConverter;
 
-    public JavaMathBigDecimalPanel(final String id, final ScalarModel scalarModel) {
+    public JavaMathBigDecimalPanel(final String id, final ScalarModel scalarModel, final IConverter<BigDecimal> threadSafeConverter) {
         super(id, scalarModel, BigDecimal.class);
+        this.threadSafeConverter = threadSafeConverter;
     }
  
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
+    protected TextField<BigDecimal> createTextField(final String id) {
+        final ScalarModel model = getModel();
+        return new BigDecimalTextField(id, newTextFieldValueModel(), cls, model, threadSafeConverter);
     }
     
-    protected TextField<BigDecimal> createTextField(final String id) {
+    static final class BigDecimalTextField extends TextField<BigDecimal> {
         
-        final ScalarModel model = getModel();
+        private static final long serialVersionUID = 1L;
         
-        return new BigDecimalTextField(id, newTextFieldValueModel(), cls, model);
+        private final ScalarModel scalarModel;
+        private final IConverter<BigDecimal> threadSafeConverter;
+
+        BigDecimalTextField(
+                final String id, final IModel<BigDecimal> model, final Class<BigDecimal> type, 
+                final ScalarModel scalarModel, 
+                final IConverter<BigDecimal> threadSafeConverter) {
+            super(id, model, type);
+            this.scalarModel = scalarModel;
+            this.threadSafeConverter = threadSafeConverter;
+        }
+
+        @SuppressWarnings("unchecked")
+        @Override
+        public <C> IConverter<C> getConverter(Class<C> type) {
+            final Integer scale = scalarModel.getScale();
+            if (type != BigDecimal.class) {
+                return super.getConverter(type);
+            } 
+            if (scale == null) {
+                return (IConverter<C>) threadSafeConverter;
+            } 
+            return (IConverter<C>) new ConverterWithScale(scale, threadSafeConverter);
+        }
     }
+    
+    static final class ConverterWithScale implements IConverter<BigDecimal> {
+        private static final long serialVersionUID = 1L;
+        
+        private final Integer scale;
+        private final IConverter<BigDecimal> converter;
+
+        ConverterWithScale(Integer scale, IConverter<BigDecimal> threadSafeConverter) {
+            this.scale = scale;
+            this.converter = threadSafeConverter;
+        }
 
+        @Override
+        public BigDecimal convertToObject(String valueStr, Locale locale) {
+            final BigDecimal bd = converter.convertToObject(valueStr, locale);
+            return bd != null ? bd.setScale(this.scale) : null; 
+        }
+
+        @Override
+        public String convertToString(BigDecimal value, Locale locale) {
+            return converter.convertToString(value, locale);
+        }
+    }
 }
+
+
+

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanelFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanelFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanelFactory.java
index bfe6bb9..beaef5a 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanelFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanelFactory.java
@@ -19,7 +19,11 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath;
 
+import java.math.BigDecimal;
+
 import org.apache.wicket.Component;
+import org.apache.wicket.util.convert.IConverter;
+import org.apache.wicket.util.convert.converter.BigDecimalConverter;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
@@ -32,13 +36,15 @@ public class JavaMathBigDecimalPanelFactory extends ComponentFactoryScalarAbstra
 
     private static final long serialVersionUID = 1L;
 
+    private final IConverter<BigDecimal> threadSafeConverter = new BigDecimalConverter();
+    
     public JavaMathBigDecimalPanelFactory() {
         super(JavaMathBigDecimalPanel.class, java.math.BigDecimal.class);
     }
 
     @Override
     public Component createComponent(final String id, final ScalarModel scalarModel) {
-        return new JavaMathBigDecimalPanel(id, scalarModel);
+        return new JavaMathBigDecimalPanel(id, scalarModel, threadSafeConverter);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
index 5e5eea0..2147416 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanel.java
@@ -30,6 +30,7 @@ import org.apache.wicket.util.convert.converter.AbstractIntegerConverter;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
 import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
+import org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath.JavaMathBigIntegerPanelFactory.BigIntegerConverter;
 
 /**
  * Panel for rendering scalars of type {@link BigInteger}.
@@ -61,26 +62,10 @@ public class JavaMathBigIntegerPanel extends ScalarPanelTextFieldNumeric<BigInte
         return new TextField<BigInteger>(ID_SCALAR_VALUE, new TextFieldValueModel<BigInteger>(this), BigInteger.class) {
             private static final long serialVersionUID = 1L;
 
-//            @Override
-//            public IConverter getConverter(Class<?> type) {
-//                return type == BigInteger.class? CONVERTER: super.getConverter(type);
-//            }
-            
+            @SuppressWarnings("unchecked")
             @Override
             public <C> IConverter<C> getConverter(Class<C> type) {
-                @SuppressWarnings("unchecked")
-                final IConverter<C> converter = (IConverter<C>) new AbstractIntegerConverter<BigInteger>() {
-                    private static final long serialVersionUID = 1L;
-                    @Override
-                    public BigInteger convertToObject(String value, Locale locale) {
-                        return new BigInteger(value);
-                    }
-                    @Override
-                    protected Class<BigInteger> getTargetType() {
-                        return BigInteger.class;
-                    }
-                };
-                return type == BigInteger.class? converter: super.getConverter(type);
+                return (IConverter<C>) (type == BigInteger.class? BigIntegerConverter.INSTANCE: super.getConverter(type));
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanelFactory.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanelFactory.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanelFactory.java
index c047520..bd10c2b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanelFactory.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigIntegerPanelFactory.java
@@ -19,7 +19,17 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.Locale;
+
 import org.apache.wicket.Component;
+import org.apache.wicket.util.convert.ConversionException;
+import org.apache.wicket.util.convert.IConverter;
+import org.apache.wicket.util.convert.converter.AbstractIntegerConverter;
+import org.apache.wicket.util.convert.converter.BigDecimalConverter;
+import org.apache.wicket.util.convert.converter.IntegerConverter;
+import org.apache.wicket.util.string.Strings;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
@@ -30,6 +40,48 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ComponentFactoryScala
  */
 public class JavaMathBigIntegerPanelFactory extends ComponentFactoryScalarAbstract {
 
+    public static final class BigIntegerConverter extends AbstractIntegerConverter<BigInteger> {
+        private static final long serialVersionUID = 1L;
+
+        /**
+         * The singleton instance for a big integer converter
+         * (cf the Wicket subclasses)
+         */
+        public static final IConverter<BigInteger> INSTANCE = new BigIntegerConverter();
+
+        @Override
+        public BigInteger convertToObject(String value, Locale locale) throws ConversionException {
+            if (Strings.isEmpty(value))
+            {
+                return null;
+            }
+
+            final Number number = parse(value, -Double.MAX_VALUE, Double.MAX_VALUE, locale);
+
+            if (number instanceof BigInteger)
+            {
+                return (BigInteger)number;
+            }
+            else if (number instanceof Long)
+            {
+                return BigInteger.valueOf(number.longValue());
+            }
+            else if (number instanceof Integer)
+            {
+                return BigInteger.valueOf(number.intValue());
+            }
+            else
+            {
+                return new BigInteger(value);
+            }
+        }
+
+        @Override
+        protected Class<BigInteger> getTargetType() {
+            return BigInteger.class;
+        }
+    }
+
     private static final long serialVersionUID = 1L;
 
     public JavaMathBigIntegerPanelFactory() {

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaDateTime.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaDateTime.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaDateTime.java
index 0b63d58..f08ab6e 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaDateTime.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaDateTime.java
@@ -20,6 +20,7 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
 import java.util.Locale;
 
+import org.apache.wicket.util.convert.ConversionException;
 import org.joda.time.DateTime;
 
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
@@ -38,14 +39,19 @@ public class DateConverterForJodaDateTime extends DateConverterForJodaAbstract<D
     
 
     @Override
-    protected DateTime doConvertToObject(String value, Locale locale) {
+    protected DateTime doConvertToObject(String value, Locale locale) throws ConversionException {
+        final DateTime parsedDateTime = convert(value);
+        return parsedDateTime.minusDays(adjustBy);
+    }
+
+    private DateTime convert(String value) throws ConversionException {
         try {
-            return getFormatterForDateTimePattern().parseDateTime(value).minusDays(adjustBy);
+            return getFormatterForDateTimePattern().parseDateTime(value);
         } catch(IllegalArgumentException ex) {
             try {
-                return getFormatterForDatePattern().parseDateTime(value).minusDays(adjustBy);
+                return getFormatterForDatePattern().parseDateTime(value);
             } catch(IllegalArgumentException ex2) {
-                return null;
+                throw new ConversionException("Cannot convert into a date/time", ex2);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDate.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDate.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDate.java
index c709b8b..b895973 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDate.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDate.java
@@ -20,6 +20,7 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
 import java.util.Locale;
 
+import org.apache.wicket.util.convert.ConversionException;
 import org.joda.time.LocalDate;
 
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
@@ -37,12 +38,18 @@ public class DateConverterForJodaLocalDate extends DateConverterForJodaAbstract<
     }
 
     @Override
-    protected LocalDate doConvertToObject(String value, Locale locale) {
+    protected LocalDate doConvertToObject(String value, Locale locale) throws ConversionException {
+        LocalDate date = convert(value);
+        LocalDate adjustedDate = date.minusDays(adjustBy);
+        return adjustedDate;
+    }
+
+    private LocalDate convert(String value) throws ConversionException {
         try {
-            final LocalDate dt = getFormatterForDatePattern().parseLocalDate(value);
-            return dt.minusDays(adjustBy);
+            LocalDate date = getFormatterForDatePattern().parseLocalDate(value);
+            return date;
         } catch(IllegalArgumentException ex) {
-            return null;
+            throw new ConversionException("Cannot convert into a date", ex);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDateTime.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDateTime.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDateTime.java
index a65ddde..d93750b 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDateTime.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jodatime/DateConverterForJodaLocalDateTime.java
@@ -20,6 +20,7 @@ package org.apache.isis.viewer.wicket.ui.components.scalars.jodatime;
 
 import java.util.Locale;
 
+import org.apache.wicket.util.convert.ConversionException;
 import org.joda.time.LocalDateTime;
 
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
@@ -38,13 +39,21 @@ public class DateConverterForJodaLocalDateTime extends DateConverterForJodaAbstr
 
     @Override
     protected LocalDateTime doConvertToObject(String value, Locale locale) {
+        LocalDateTime dateTime = convert(value);
+        LocalDateTime adjustedDateTime = dateTime.minusDays(adjustBy);
+        return adjustedDateTime;
+    }
+
+    private LocalDateTime convert(String value) {
         try {
-            return getFormatterForDateTimePattern().parseLocalDateTime(value).minusDays(adjustBy);
+            final LocalDateTime dateTime = getFormatterForDateTimePattern().parseLocalDateTime(value);
+            return dateTime;
         } catch(IllegalArgumentException ex) {
             try {
-                return getFormatterForDatePattern().parseLocalDateTime(value).minusDays(adjustBy);
+                final LocalDateTime dateTime = getFormatterForDatePattern().parseLocalDateTime(value);
+                return dateTime;
             } catch(IllegalArgumentException ex2) {
-                return null;
+                throw new ConversionException("Cannot convert into a date/time", ex);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
index be2f992..bb85b0c 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BytePanel.java
@@ -19,8 +19,14 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
+import org.apache.wicket.markup.html.form.AbstractTextComponent;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.util.convert.IConverter;
+import org.apache.wicket.util.convert.converter.ByteConverter;
+
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
 
 /**
  * Panel for rendering scalars of type {@link Byte} or <tt>byte</tt>.
@@ -33,5 +39,17 @@ public class BytePanel extends ScalarPanelTextFieldNumeric<Byte> {
         super(id, scalarModel, Byte.class);
     }
 
+    @Override
+    protected AbstractTextComponent<Byte> createTextFieldForRegular() {
+        return new TextField<Byte>(ID_SCALAR_VALUE, new TextFieldValueModel<Byte>(this), Byte.class) {
+            private static final long serialVersionUID = 1L;
+
+            @SuppressWarnings("unchecked")
+            @Override
+            public <C> IConverter<C> getConverter(Class<C> type) {
+                return (IConverter<C>) (type == Byte.class? ByteConverter.INSTANCE: super.getConverter(type));
+            }
+        };
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java
index cf22bb9..61217d0 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/CharacterPanel.java
@@ -34,9 +34,4 @@ public class CharacterPanel extends ScalarPanelTextFieldParseableAbstract {
         super(id, ID_SCALAR_VALUE, scalarModel);
     }
 
-    @Override
-    protected void addSemantics() {
-        super.addSemantics();
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
index 084c2fd..32cff69 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/DoublePanel.java
@@ -19,8 +19,14 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
+import org.apache.wicket.markup.html.form.AbstractTextComponent;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.util.convert.IConverter;
+import org.apache.wicket.util.convert.converter.DoubleConverter;
+
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
 
 /**
  * Panel for rendering scalars of type {@link Double} or <tt>double</tt>.
@@ -32,4 +38,18 @@ public class DoublePanel extends ScalarPanelTextFieldNumeric<Double> {
     public DoublePanel(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel, Double.class);
     }
+    
+    @Override
+    protected AbstractTextComponent<Double> createTextFieldForRegular() {
+        return new TextField<Double>(ID_SCALAR_VALUE, new TextFieldValueModel<Double>(this), Double.class) {
+            private static final long serialVersionUID = 1L;
+
+            @SuppressWarnings("unchecked")
+            @Override
+            public <C> IConverter<C> getConverter(Class<C> type) {
+                return (IConverter<C>) (type == Double.class? DoubleConverter.INSTANCE: super.getConverter(type));
+            }
+        };
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
index cfc0290..a411934 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/FloatPanel.java
@@ -19,8 +19,14 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
+import org.apache.wicket.markup.html.form.AbstractTextComponent;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.util.convert.IConverter;
+import org.apache.wicket.util.convert.converter.FloatConverter;
+
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
 
 /**
  * Panel for rendering scalars of type {@link Float} or <tt>float</tt>.
@@ -33,4 +39,18 @@ public class FloatPanel extends ScalarPanelTextFieldNumeric<Float> {
         super(id, scalarModel, Float.class);
     }
 
+    @Override
+    protected AbstractTextComponent<Float> createTextFieldForRegular() {
+        return new TextField<Float>(ID_SCALAR_VALUE, new TextFieldValueModel<Float>(this), Float.class) {
+            private static final long serialVersionUID = 1L;
+
+            @SuppressWarnings("unchecked")
+            @Override
+            public <C> IConverter<C> getConverter(Class<C> type) {
+                return (IConverter<C>) (type == Float.class? FloatConverter.INSTANCE: super.getConverter(type));
+            }
+        };
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
index be40fba..a0829e5 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/IntegerPanel.java
@@ -19,8 +19,14 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
+import org.apache.wicket.markup.html.form.AbstractTextComponent;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.util.convert.IConverter;
+import org.apache.wicket.util.convert.converter.IntegerConverter;
+
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
 
 /**
  * Panel for rendering scalars of type {@link Integer} or <tt>int</tt>.
@@ -33,4 +39,17 @@ public class IntegerPanel extends ScalarPanelTextFieldNumeric<Integer> {
         super(id, scalarModel, Integer.class);
     }
 
+    @Override
+    protected AbstractTextComponent<Integer> createTextFieldForRegular() {
+        return new TextField<Integer>(ID_SCALAR_VALUE, new TextFieldValueModel<Integer>(this), Integer.class) {
+            private static final long serialVersionUID = 1L;
+
+            @SuppressWarnings("unchecked")
+            @Override
+            public <C> IConverter<C> getConverter(Class<C> type) {
+                return (IConverter<C>) (type == Integer.class? IntegerConverter.INSTANCE: super.getConverter(type));
+            }
+        };
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
index 69b8493..6879f18 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/LongPanel.java
@@ -19,8 +19,14 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
+import org.apache.wicket.markup.html.form.AbstractTextComponent;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.util.convert.IConverter;
+import org.apache.wicket.util.convert.converter.LongConverter;
+
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
 
 /**
  * Panel for rendering scalars of type {@link Long} or <tt>long</tt>.
@@ -33,4 +39,17 @@ public class LongPanel extends ScalarPanelTextFieldNumeric<Long> {
         super(id, scalarModel, Long.class);
     }
 
+    @Override
+    protected AbstractTextComponent<Long> createTextFieldForRegular() {
+        return new TextField<Long>(ID_SCALAR_VALUE, new TextFieldValueModel<Long>(this), Long.class) {
+            private static final long serialVersionUID = 1L;
+
+            @SuppressWarnings("unchecked")
+            @Override
+            public <C> IConverter<C> getConverter(Class<C> type) {
+                return (IConverter<C>) (type == Long.class? LongConverter.INSTANCE: super.getConverter(type));
+            }
+        };
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
index 0e463c7..7e7494d 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/ShortPanel.java
@@ -19,8 +19,14 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
+import org.apache.wicket.markup.html.form.AbstractTextComponent;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.util.convert.IConverter;
+import org.apache.wicket.util.convert.converter.ShortConverter;
+
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
+import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel;
 
 /**
  * Panel for rendering scalars of type {@link Short} or <tt>short</tt>.
@@ -34,4 +40,17 @@ public class ShortPanel extends ScalarPanelTextFieldNumeric<Short> {
         super(id, scalarModel, Short.class);
     }
 
+    @Override
+    protected AbstractTextComponent<Short> createTextFieldForRegular() {
+        return new TextField<Short>(ID_SCALAR_VALUE, new TextFieldValueModel<Short>(this), Short.class) {
+            private static final long serialVersionUID = 1L;
+
+            @SuppressWarnings("unchecked")
+            @Override
+            public <C> IConverter<C> getConverter(Class<C> type) {
+                return (IConverter<C>) (type == Short.class? ShortConverter.INSTANCE: super.getConverter(type));
+            }
+        };
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/48c9e60b/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterTest.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterTest.java b/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterTest.java
index 9cac7b8..1501e04 100644
--- a/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterTest.java
+++ b/component/viewer/wicket/ui/src/test/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/BigDecimalConverterTest.java
@@ -19,7 +19,9 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath;
 
 import java.math.BigDecimal;
+import java.util.Locale;
 
+import org.apache.wicket.util.convert.converter.BigDecimalConverter;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -29,10 +31,10 @@ public class BigDecimalConverterTest {
     final BigDecimal bd_123_45_scale4 = new BigDecimal("123.45").setScale(4);
     final BigDecimal bd_123_4500_scale2 = new BigDecimal("123.4500").setScale(2);
     final BigDecimal bd_123_4500_scale4 = new BigDecimal("123.4500").setScale(4);
-    
+
     @Test
     public void test_scale2() {
-        final BigDecimal actual = new BigDecimalConverter(2).convertToObject("123.45", null);
+        final BigDecimal actual = new JavaMathBigDecimalPanel.ConverterWithScale(2, new BigDecimalConverter()).convertToObject("123.45", Locale.ENGLISH);
         Assert.assertEquals(bd_123_4500_scale2, actual);
         Assert.assertEquals(bd_123_45_scale2, actual);
         
@@ -42,7 +44,7 @@ public class BigDecimalConverterTest {
     
     @Test
     public void test_scale4() {
-        final BigDecimal actual = new BigDecimalConverter(4).convertToObject("123.45", null);
+        final BigDecimal actual = new JavaMathBigDecimalPanel.ConverterWithScale(4, new BigDecimalConverter()).convertToObject("123.45", Locale.ENGLISH);
         Assert.assertNotEquals(bd_123_4500_scale2, actual);
         Assert.assertNotEquals(bd_123_45_scale2, actual);
         
@@ -51,14 +53,13 @@ public class BigDecimalConverterTest {
     }
     
     @Test
-    public void test_scaleNull() {
-        final BigDecimal actual = new BigDecimalConverter(null).convertToObject("123.45", null);
+    public void otherLocale() {
+        final BigDecimal actual = new JavaMathBigDecimalPanel.ConverterWithScale(2, new BigDecimalConverter()).convertToObject("123,45", Locale.ITALIAN);
         Assert.assertEquals(bd_123_4500_scale2, actual);
         Assert.assertEquals(bd_123_45_scale2, actual);
         
         Assert.assertNotEquals(bd_123_4500_scale4, actual);
         Assert.assertNotEquals(bd_123_45_scale4, actual);
     }
-    
 
 }