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


问题内容

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

很简单,如果我收到验证错误,我想在每个受苦字段上方重新显示带有错误消息的表单。

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

FieldError usernameFieldError = bindingResult.getFieldError("username");

太好了,现在我拿着一个FieldError对象,假设我使用的是DefaultMessageCodeResolvernow,其中包含类似4种可能的错误代码。

我如何从FieldError->用户可以使用的字符串开始?

MessageSource在Web应用程序上下文中有一个定义,因此可以将单个错误代码映射到消息。

但是有时默认消息是最好的,有时我希望其中两个错误代码可能都有相关的消息,因此我们需要选择最好的消息。

我应该使用哪种方法来确定针对现场错误可能出现的 最佳 错误消息?

  • 我是否需要编写某种算法来遍历所有错误代码并从最具体的代码中进行选择?
  • spring是否提供任何支持来帮助确定最具体的错误消息?
  • 整个过程似乎很漫长且令人费解,我以为应该使春天变得容易。也许我完全不在基地了?

问题答案:

正如您所猜到的那样,您正在使自己变得更加困难。该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