Spring:如何解决验证错误 - >错误代码 - >错误消息

Dav*_*rks 8 java validation spring-mvc

在Spring中,经过验证后我们得到了一个BindingResult对象controller.

很简单,如果我收到验证错误,我想重新显示我的表单,并在每个受影响的字段上方显示错误消息.

因此,要检查领域错误的现场username我的FormObject我的呼叫:

FieldError usernameFieldError = bindingResult.getFieldError("username");
Run Code Online (Sandbox Code Playgroud)

太好了,现在我拿着一个FieldError对象,假设我使用的DefaultMessageCodeResolver现在包含4个可能的错误代码.

我该怎么做FieldError- >一个可供用户使用的字符串?

MessageSource在我的webapplication上下文中定义了,所以我可以将单个错误代码映射到消息.

但有时默认消息是最好的,有时我希望两个错误代码可能有相关的消息,所以我们需要选择最好的消息.

我可以使用什么方法来确定为字段错误提供的最佳错误消息?

  • 我是否需要编写一些算法来检查所有错误代码并从最具体的方法中挑选?
  • Spring是否为帮助确定最具体的错误消息提供了任何支持?
  • 整个过程看起来如此漫长和令人费解,我认为春天应该让这个东西变得容易.也许我不知何故完全偏离了基地?

Aff*_*ffe 15

正如您所猜测的那样,您正在努力让自己变得更加困难.该FieldError对象本身就是一个MessageSourceResolvable.您无需从中获取代码,然后手动将单个代码移至消息源并继续查看.您可以将其传递给您MessageSource,它将找到在您的语言环境中定义了翻译的最具体的一个.(假设你的代码解析器以正确的顺序放置它们.)

在大多数情况下,你甚至不需要这样做.Errors通常不需要放置您的支持对象并自己翻译它们.formjsp库中的命名空间提供了一个标记,可以为您查找错误消息.所有你需要做的就是把ErrorsModelMap.查看文档:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/view.html#view-jsp-formtaglib-errorstag