我昨天让它工作了,然后我做了一些事情,现在我已经尝试修复它好几个小时了,我就是无法让它工作了。
我有一个 Spring MVC 应用程序,其中包含<form:form>
我想<form:errors>
在用户输入错误信息时从 .properties 文件显示自定义错误消息 ( )。JSR-303 注释中定义了“错误”。
表格摘录:
<form:form method="post" action="adduserprofile" modelAttribute="bindableUserProfile">
<table>
<tr>
<td><form:label path="firstName">Voornaam</form:label></td>
<td>
<form:input path="firstName"/>
<form:errors path="firstName" />
</td>
</tr>
<tr>
<td><form:label path="lastName">Achternaam</form:label></td>
<td>
<form:input path="lastName"/>
<form:errors path="lastName" />
</td>
</tr>
BindableUserProfile 的摘录:
@NotNull
@Size(min = 3, max = 40, message="{errors.requiredfield}")
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@NotNull
@Size(min = 3, max = 40, message="errors.requiredfield")
public String getLastName() {
return lastName;
}
控制器摘录:
@RequestMapping(value = "/edit/{userProfileId}", method = RequestMethod.GET)
public String createOrUpdate(@PathVariable Long userProfileId, Model model) {
if (model.containsAttribute("bindableUserProfile")) {
model.addAttribute("userProfile", model.asMap().get("bindableUserProfile"));
} else {
UserProfile profile = userProfileService.findById(userProfileId);
if (profile != null) {
model.addAttribute(new BindableUserProfile(profile));
} else {
model.addAttribute(new BindableUserProfile());
}
}
model.addAttribute("includeFile", "forms/userprofileform.jsp");
return "main";
}
@RequestMapping(value = "/adduserprofile", method = RequestMethod.POST)
public String addUserProfile(@Valid BindableUserProfile userProfile, BindingResult result, Model model) {
if (result.hasErrors()) {
return createOrUpdate(null, model);
}
UserProfile profile = userProfile.asUserProfile();
userProfileService.addUserProfile(profile);
return "redirect:/userprofile";
}
摘自 application-context.xml
<bean name="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages/messages"/>
</bean>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="validationMessageSource">
<ref bean="messageSource"/>
</property>
</bean>
在资源/消息中,我有两个文件,messages_en.properties 和 messages_nl.properties。两者都有相同的简单内容:
errors.requiredfield=This field is required!!!
- 当我以空的名字提交表单时,我可以在控制器方法“addUserProfile()”中看到确实发现了错误。
- 当我以空的名字提交表单时,消息标识符显示在字段旁边,即在姓氏的情况下,文字文本“errors.requiredfield”或“{errors.requiredfield}”。
- 当我将消息属性值更改为“Foo”时,“Foo”显示为错误消息。所以错误机制本身似乎工作正常。
- application-context.xml 中的 messageSource bean 必须正确,因为它说当我更改基本名称时它找不到属性文件。
- NotNull 注释不会捕获空输入。Spring 将空输入视为空字符串,而不是 null。
因此,似乎找到了属性文件并且正确处理了验证注释,但是 Spring 不明白它必须用属性文件中的消息替换消息键。