如何使用 spring 3 mvc 和 hibernate 验证器在 jsp 中返回自定义消息(jsr303)

发布于 2024-11-27 08:41:25 字数 1589 浏览 1 评论 0原文

我有一个使用 spring 3 mvc 和 hibernate 验证器来验证表单对象的项目。

我遵循 spring 的 文档

在我的控制器中,我可以获得绑定结果,其中 bindingresult.hasErrors() == true

我使用 ReloadableResourceBundleMessageSource 进行错误消息绑定。
我的问题是: 我的jsp网页中是否可以有更灵活的错误信息显示?

例如,我想说“应用程序名称 UserEnteredAppName 无效。大小应在 2255 之间”。

在我的 message.property 中,我定义:

Size.appNameForm.itemName=the app name {What Should I do in this brace?} is not valid. The size should be between {1} and {2}

{1} 和 {2} 可以插值为“2”和“255”。但如何获取内插消息中的 UserEnteredAppName ?

下面是我的表单类和控制器类:

我的控制器类:

@RequestMapping(value="foo.htm")
public String handleAppNameFormSubmit(@Valid @ModelAttribute("appNameForm") AppNameForm form, BindingResult result){
}

我的表单类:

public class AppNameForm implements IForm{
    @NotEmpty
    @Size(min = 1, max = 255)
    private String itemName;
    ....
}

我发现一些链接给了我一些提示:

例如: 如何使用 Hibernate Validator 动态解析消息参数?

但我正在使用 spring mvc 和 spring controll要使用 jsr303 实现,我找不到使用自定义验证器的方法,扩展 hibernate 的默认 ValidatorImpl。

我认为解决方案是,我可以拥有自定义验证器,它将拒绝将 UserEnteredAppName 放入绑定结果中。是否可以?或者我应该寻找另一种方式?

谢谢 安德鲁

I have a project using spring 3 mvc and hibernate validator to validate form object.

I follow spring's document

In my controller, I can get bindingresult, which bindingresult.hasErrors() == true.

I use ReloadableResourceBundleMessageSource to do the error message binding.
And my question is:
Is it possible that I can have a more flexible error message display in my jsp web page?

For example, I want to say "the app name UserEnteredAppName is not valid. The size should be between 2 and 255".

In my message.property, I define:

Size.appNameForm.itemName=the app name {What Should I do in this brace?} is not valid. The size should be between {1} and {2}

{1} and {2} can be interpolated to '2' and '255'. but how can I get the UserEnteredAppName in the interpolated message?

Below is my form class and controller class:

My controller class:

@RequestMapping(value="foo.htm")
public String handleAppNameFormSubmit(@Valid @ModelAttribute("appNameForm") AppNameForm form, BindingResult result){
}

My form class:

public class AppNameForm implements IForm{
    @NotEmpty
    @Size(min = 1, max = 255)
    private String itemName;
    ....
}

I find some links which give me some hint:

for example: How do I dynamically resolve message parameters with Hibernate Validator?

But I am using spring mvc and spring controll which jsr303 implementation to use, I cant find a way to use custom validator, extending hibernate's default ValidatorImpl.

What I am thinking the solution is, I can have custom validator, which will reject the UserEnteredAppName into the bindingResult. is it possible? or I should find another way?

Thanks
Andrew

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我还不会笑 2024-12-04 08:41:25

从 4.2 版开始,Hibernate Validator 提供了 ValueFormatterMessageInterpolator,一个新的消息插值器,应该可以满足您的要求。

通过该插值器,您可以使用占位符 ${validatedValue} 引用经过验证的值。您还可以指定格式字符串像这样应用:${validatedValue:[格式字符串]},例如,如果验证值是日期,则${validatedValue:%1$ty}

使用此插值器的示例可以在 Hibernate Validator 参考指南

As of release 4.2 Hibernate Validator provides ValueFormatterMessageInterpolator, a new message interpolator which should fulfill your requirements.

With that interpolator you can refer to the validated value using the place holder ${validatedValue}. You can also specify a format string to be applied like this: ${validatedValue:[format string]}, e.g. ${validatedValue:%1$ty} if the validated value is a date.

An example for using this interpolator can be found in the Hibernate Validator reference guide.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文