Spring:如何解决验证错误->错误代码->错误消息
Posted
技术标签:
【中文标题】Spring:如何解决验证错误->错误代码->错误消息【英文标题】:Spring: How to resolve a validation error -> error code -> error message 【发布时间】:2011-05-11 06:53:57 【问题描述】:在 Spring 中,经过验证后,我们会在 controller
中获得一个 BindingResult
对象。
很简单,如果我遇到验证错误,我想重新显示我的表单,并在每个受影响的字段上方显示错误消息。
所以要检查我的FormObject
的字段username
上的字段错误,我打电话:
FieldError usernameFieldError = bindingResult.getFieldError("username");
太好了,现在我持有一个 FieldError
对象,假设我使用的是 DefaultMessageCodeResolver
,现在它包含类似 4 个可能的错误代码。
我如何从FieldError
-> 一个用户可以消费的字符串?
我在我的 Web 应用程序上下文中定义了一个 MessageSource
,因此我可以将单个错误代码映射到一条消息。
但有时默认消息会是最好的,有时我希望两个错误代码可能有相关的消息,所以我们需要选择最好的一个。
我使用什么方法来确定最佳可能的错误消息以针对字段错误显示?
是否需要编写一些算法来检查所有错误代码并从最具体的代码中进行选择? Spring 是否提供任何支持来帮助确定最具体的错误消息? 整个过程看起来如此漫长和复杂,我认为春天应该让这些事情变得简单。也许我不知何故完全偏离了基地?【问题讨论】:
【参考方案1】:正如你所猜想的那样,你让自己变得比需要的更难。 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
【讨论】:
哦,我明白了,我没有抓住 MessageSource.get(MessageSoureResolvable, ...),我只是注意到 get(String, ...) 选项,这是关键链接(实际上我可能注意到了这一点,并在学习新框架/api时迷失的无数细节中迷失了它)。谢谢!! 关于 JSP 标签库的有趣点,我使用的是 Velocity,但 Spring 以宏形式提供了相同的功能。但我还没有使用它,因为它似乎相当反弹簧,甚至将我的视图呈现与弹簧框架联系起来。我认为我的控制器现在调用特定于 spring 的 MessageSource 而不是 java-standard ResourceBundle 已经够糟糕了。但也许我想多了?这是我第一次参加 Spring。 确实如此,但就视图技术而言,您通常最终会与 某些东西耦合。尝试只使用 JSTL 和 servlet API! WebMVC 和 WebFlow 是相当非侵入性的,并且使用标签库,您可以相当轻松地创建自己的 .tag 文件来包装它们并将依赖关系“隔离”到一个地方,以便以后可以更改实现。使用该标签还可以消除对支持对象中 Errors 接口的依赖,从而允许您使用无弹簧的 pojo。以上是关于Spring:如何解决验证错误->错误代码->错误消息的主要内容,如果未能解决你的问题,请参考以下文章
本机win10远程桌面连接发生身份验证错误,代码:0x80004005如何解决?