Spring MVC - 将空白表单值绑定到原始Bean字段

时间:2012-01-04 23:20:40

标签: forms spring model-view-controller binding javabeans

我见过几个相似的问题,但我还没有找到解决这个问题的答案。我有一个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 :(得分:0)

我从未尝试过,但尝试注册int.class的编辑器(这真的很有效)。

但是因为int无法处理null new CustomNumberEditor(Integer.class, true)无效。

所以你需要你自己的数字编辑器,例如0返回的值不是定义的值。

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