У меня это работало вчера, а потом я что-то сделал, и теперь я пытался исправить это часами, и я просто не могу заставить его работать.
У меня есть приложение 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";
}
Выдержка из приложения -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>
В ресурсах/сообщениях у меня есть два файла: сообщения _en.properties и сообщения _nl.properties. Оба имеют одинаковое простое содержание :
errors.requiredfield=This field is required!!!
Итак, кажется, что файлы свойств найдены, и аннотации проверки правильно обработаны, но Spring не понимает, что он должен заменить ключи сообщений сообщениями из файлов свойств.