Spring MVC - привязка значений бланков к полям примитивных бинов - PullRequest
0 голосов
/ 05 января 2012

Я видел несколько похожих вопросов, но мне еще предстоит найти ответ, который решает эту проблему. У меня есть форма 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>

Теперь, пока в поле ввода "counter" есть действительное числовое значение, все работает как положено, но если поле пустое, я получаю ошибку проверки формы:

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, а не в случае ошибки)? Если да, не могли бы вы опубликовать простой пример?

Большое спасибо, Питер

1 Ответ

0 голосов
/ 05 января 2012

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

Но поскольку int не может обработать null new CustomNumberEditor(Integer.class, true), не будет работать.1007 *

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

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