java - Spring : How to resolve a validation error -> error code -> error message

标签 java spring-mvc validation

在 Spring 中,验证后我们在 controller 中得到一个 BindingResult 对象。

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

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

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

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

如何从 FieldError -> A string that is consumable to the user?

我在我的 Web 应用程序上下文中定义了一个 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

关于java - Spring : How to resolve a validation error -> error code -> error message,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4202437/

相关文章:

Excel为动态下拉列表创建数据验证唯一项,无需新列

file - 验证 doc docx 类型文件时出现 Laravel 5.1 错误

java - eclipse /Tomcat : tomcat home page is reachable but app is not

java - 从存储在数组列表(二维)中的对象访问数组列表的所有元素

tomcat - 如何在 Tomcat 上将 SPRING MVC Web 应用程序上下文设置为 ROOT (/)?

java - 使用注释帮助第一个 spring MVC 页面

java - Spring Security 自定义流程

html - 有没有一种有效的方法可以用 HTML 元素包装 dt 和 dd?

java - 两个 boolean 属性之间的双向反相器绑定(bind)

java - 在 Visual Studio Code 中导入 .jar,类路径