Сообщения проверки не извлекаются из файла свойств сообщения в Spring

У меня это работало вчера, а потом я что-то сделал, и теперь я пытался исправить это часами, и я просто не могу заставить его работать.

У меня есть приложение 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!!!
  • . Когда я отправляю форму с пустым именем, я вижу в методе контроллера «addUserProfile ()», что ошибки действительно обнаружены.
  • Когда я отправляю форму с пустым именем, рядом с полем отображается идентификатор сообщения, то есть буквальный текст «errors.requiredfield» или «{errors.requiredfield}» в случае фамилии.
  • Когда я изменяю значение атрибута сообщения на «Foo», вместо «Foo» отображается сообщение об ошибке. Таким образом, сам механизм ошибки работает нормально.
  • Бин messageSource из application -context.xml должен быть правильным, потому что он говорит, что не может найти файлы свойств, когда я изменяю базовое имя.
  • Пустой ввод не перехватывается аннотацией NotNull. Spring видит пустой ввод как пустую строку, а не как нуль.

Итак, кажется, что файлы свойств найдены, и аннотации проверки правильно обработаны, но Spring не понимает, что он должен заменить ключи сообщений сообщениями из файлов свойств.

6
задан tshepang 5 March 2014 в 08:08
поделиться