我见过几个相似的问题,但我还没有找到解决这个问题的答案。我有一个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而不是错误输出)?如果是这样,你介意发一个简单的例子吗?
非常感谢, 彼得
答案 0 :(得分:0)
我从未尝试过,但尝试注册int.class
的编辑器(这真的很有效)。
但是因为int
无法处理null
new CustomNumberEditor(Integer.class, true)
无效。
所以你需要你自己的数字编辑器,例如0
返回的值不是定义的值。
binder.registerCustomEditor( int.class,
new MyNumberEditorThatConvertsNullToZero() );