我正在使用Spring 3 Portlet MVC。只是MVC中的验证/绑定应该是相同的。
我只有一个int
表单字段。当我在做什么
void doSmth(MyForm form, BindingResult bindingResult) throws ... {
int bindErrors = bindingResult.getErrorCount())
...
并提交一个无法解析为int
的字段值,此方法将被执行,bindErrors
为1.此方法接收的表单字段值为0.这很好。
但是创建一个仅包含单个字段的表单并不是很好。
我正在将代码更改为:
void doSmth(@RequestParam int userId, BindingResult bindingResult) ... {
int bindErrors = bindingResult.getErrorCount())
...
并在浏览器中获取 Portlet not available 消息,此异常:
org.springframework.web.portlet.FrameworkPortlet processRequest可以 不完整的要求 org.springframework.beans.TypeMismatchException:无法转换 类型'java.lang.String'的值为必需类型'int';嵌套 异常是java.lang.NumberFormatException:对于输入字符串:“q”
问题:即使@RequestParam
类型转换失败,有没有办法继续执行方法并处理绑定错误?我尝试不要求@RequestParam
并为其提供默认值 - 没有帮助。
答案 0 :(得分:3)
Spring引用只允许BindingResult用于命令或表单对象。
org.springframework.validation.Errors / org.springframework.validation.BindingResult前面的命令或表单对象的验证结果(紧接在前的方法参数)。
(15.3.2.3 Supported handler method arguments and return types)
所以你可能需要自己实现它。
或者将单个int
包装在命令对象中并使用此对象的绑定结果(可在此处找到示例:https://stackoverflow.com/a/13407434/280244)