1

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

我按照春天的文件

在我的控制器中,我可以获得绑定结果,其中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 动态解析消息参数?

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

我在想的解决方案是,我可以有自定义验证器,它将拒绝 UserEnteredAppName 进入 bindingResult。可能吗?或者我应该找到另一种方式?

谢谢安德鲁

4

1 回答 1

1

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

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

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

于 2011-08-01T18:46:56.260 回答