我正在使用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不可用的消息和此异常:
org.springframework.web.portlet.FrameworkPortlet processRequest Could
not complete request
org.springframework.beans.TypeMismatchException: Failed to convert
value of type ‘java.lang.String’ to required type ‘int’; nested
exception is java.lang.NumberFormatException: For input string: “q”
问题:即使@RequestParam类型转换失败,有没有办法继续执行方法并处理绑定错误?我尝试不要求@RequestParam并为它提供默认值 – 没有帮助.
org.springframework.validation.Errors / org.springframework.validation.BindingResult validation results for a preceding command or form object (the immediately preceding method argument).
(15.3.2.3 Supported handler method arguments and return types)
所以你可能需要自己实现它.
>我认为您可以尝试使用Custom MethodArgumentResolver(请参阅此blog的示例).
>还有另一个当前仍然存在的堆栈溢出问题:How to customize parameter names when binding spring mvc command objects – 我觉得这个问题的解决方案可以为您的解决方案提供良好的输入.
或者将您的单个int包装在一个命令对象中并使用该对象的绑定结果(可以在此处找到一个示例:https://stackoverflow.com/a/13407434/280244)