Spring:如何解决validation错误 – >错误代码 – >错误消息

在Spring中,在validation之后,我们在controller获得了一个BindingResult对象。

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

因此,为了检查我的FormObject字段username的字段错误,我调用:

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

好的,现在我持有一个FieldError对象,假设我使用DefaultMessageCodeResolver现在包含4个可能的错误代码。

如何从FieldError – >一个可供用户使用的字符串?

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

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

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

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

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

在大多数情况下,你甚至不需要这样做。 通常不需要将Errors放在后备对象上并自行翻译它们。 jsp库中的form命名空间提供了一个标记,可以为您查找错误消息。 您需要做的就是将Errors放在ModelMap 。 查看文档:

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