从Spring表单验证器访问输入的名称

时间:2015-12-10 12:11:50

标签: spring forms validation

我有简单的用户注册表格。此表单包含字段“age”整数。我创建了表单Validator来验证所有输入。现在我有“年龄”的问题。如果用户在此字段中输入字符串(而不是整数),Validator只会说 TypeMismatch result.hasErrors()返回 true 。但是我不知道如何访问该字段的名称以将错误传递回JSP页面并显示相应的错误。我只能通过以下方式访问我的表单名称:

if(result.hasErrors()) {
            for( ObjectError error: result.getFieldErrors()) {
                System.out.println(error.getObjectName());//returns form name not problematic field
            }
}

所以我的问题:如何在Validator中访问字段名称(特定输入名称)以将错误绑定到特定输入?我需要它向用户发送一些内容,说他正在用“年龄”进行捣乱。

1 个答案:

答案 0 :(得分:1)

使用不违反框架的框架(另请参阅参考指南中的Determining if stdout for a Python process is redirected。)。

首先创建一个包含所需错误代码的属性文件。如何生成错误代码在Errors Tag中定义。基本上它做了以下

  

例如,如果代码为“typeMismatch”,则对象名称为“user”,字段为“age”:

     
      
  1. 尝试“typeMismatch.user.age”
  2.   
  3. 尝试“typeMismatch.age”
  4.   
  5. 尝试“typeMismatch.int”
  6.   
  7. 尝试“typeMismatch”
  8.   

现在假设您的模型被命名为user,将以下内容添加到属性文件中(假设它名为messages.properties。)。

typeMismatch.user.age=Entered value is not a valid age. 
typeMismatch.int=Entered value is not an integer.

现在删除控制器中的代码(保留hasError的检查,因为您可能想要重新呈现页面)。

MessageSource的配置中定义DispatcherServlet(如果您还没有)。

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="baseName" value="messages" />
</bean>

现在,在您的JSP中,只需在顶部添加<form:errors path="*" />,然后您就会在页面中出现错误。如果需要,您可以考虑用户语言添加额外奖励。

如果您想在字段旁边显示错误,可能需要执行以下操作。

<div>
    <div><label for="age">Age</label></div>
    <div><form:input path="age" id="age" /></div>
    <div><form:errors path="age" cssClass="error" /></div>
</div>

现在错误在字段后呈现。

没有必要自己搞乱这些事情。