我有简单的用户注册表格。此表单包含字段“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中访问字段名称(特定输入名称)以将错误绑定到特定输入?我需要它向用户发送一些内容,说他正在用“年龄”进行捣乱。
答案 0 :(得分:1)
使用不违反框架的框架(另请参阅参考指南中的Determining if stdout for a Python process is redirected。)。
首先创建一个包含所需错误代码的属性文件。如何生成错误代码在Errors Tag中定义。基本上它做了以下
例如,如果代码为“typeMismatch”,则对象名称为“user”,字段为“age”:
- 尝试“typeMismatch.user.age”
- 尝试“typeMismatch.age”
- 尝试“typeMismatch.int”
- 尝试“typeMismatch”
醇>
现在假设您的模型被命名为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>
现在错误在字段后呈现。
没有必要自己搞乱这些事情。