2012-01-04 5 views
0

Я видел несколько вопросов, которые похожи, но мне еще предстоит найти ответ, который решает эту проблему. У меня есть форма Spring MVC, который опирается на объект команды с примитивным свойством:Spring MVC - Связывание значений пустых форм с примитивными полями бобов

public class MyBean { 
    private int counter; 

    public int getCounter() { 
    return counter; 
    } 

    public void setCounter(int counter) { 
    this.counter = counter; 
    } 
} 

В форме JSP, я (сокращенно для ясности):

<form:form action="count.do"> 
    <form:input id="counter" path="counter"/> 
</form:form> 

В настоящее время, до тех пор, есть действительное значение числа в «счетчик» поле ввода, все работает, как ожидалось, но если поле пустым, то я получаю сообщение об ошибке проверки формы:

org.springframework.validation.BeanPropertyBindingResult: 1 errors Field error in object 'MyBean' on field 'counter': rejected value []; codes [methodInvocation.MyBean.counter,methodInvocation.counter,methodInvocation.float,methodInvocation]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [MyBean.counter,counter]; arguments []; default message [counter]]; default message [Property 'counter' threw exception; nested exception is java.lang.IllegalArgumentException] 

Я пытался создать пользовательский редактор свойств в принимают нулевые значения (инициализации в initBinder()), но это работает только если я создаю непримитивный набор оберток аксессоров:

binder.registerCustomEditor(Integer.class, new CustomNumberEditor(Integer.class, true)); 

Итак, есть ли способ, чтобы связать поле на форме примитивный тип без создания непримитивных оболочек и по-прежнему обрабатывать пустые значения (я бы хотел установить их на 0, а не на ошибку)? Если да, не могли бы вы опубликовать простой пример?

Большое спасибо, Peter

ответ

0

Я никогда не судимое это, но попытаться зарегистрировать редактор для int.class (это действительно работы).

Но поскольку a int не может обрабатывать nullnew CustomNumberEditor(Integer.class, true) не будет работать.

Значит, вам нужен ваш собственный редактор номеров, который возвращает, например, 0 не определено.

binder.registerCustomEditor(int.class, 
    new MyNumberEditorThatConvertsNullToZero());