Les messages de Validation ne sont pas prises à partir d'un message de fichier de propriétés au Printemps

Je l'ai eu à travailler hier et puis j'ai fait quelque chose et maintenant j'ai essayé de le fixer pendant des heures et je ne peux pas le faire fonctionner.

J'ai un Spring MVC application contenant un <form:form> que je veux afficher des messages d'erreur personnalisés (<form:errors>) à partir d'un .fichier de propriétés lorsque l'utilisateur tape dans de fausses informations. Ce "mal", c'est défini dans la JSR-303 annotations.

Extrait de la forme:

<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>

Extrait de la 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;
}

Extrait du contrôleur:

    @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";
}

Extrait de 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>

Dans ressources/messages que j'ai deux fichiers, messages_en.propriétés et messages_nl.les propriétés. Les deux ont le même, simple contenu:

errors.requiredfield=This field is required!!!
  • Quand je soumettre le formulaire avec un prénom vide je peux voir dans le contrôleur de la méthode 'addUserProfile()' que les erreurs sont en effet retrouvés.
  • Quand je soumettre le formulaire avec un vide d'abord le nom de l'identificateur de message s'affiche à côté du champ, c'est le sens littéral du texte "les erreurs.requiredfield" ou "{erreurs.requiredfield}" dans le cas du nom de famille.
  • Quand j'ai modifier le message de la valeur de l'attribut "Foo" que "Foo" est montré comme le message d'erreur. Ainsi, le mécanisme d'erreur lui-même semble bien fonctionner.
  • La messageSource de la fève de application-context.xml doit être correcte, parce qu'il dit qu'il ne peut pas trouver les fichiers de propriétés lorsque je change le nom de base.
  • Le vide d'entrée n'est pas interceptée par le NotNull annotation. Le printemps voit d'entrée vide comme une chaîne vide et non pas comme nulle.

Donc, il semble que les propriétés des fichiers sont trouvés et la validation des annotations sont correctement traitées, mais le Printemps ne veut pas comprendre qu'il doit remplacer les clés de message avec des messages à partir des propriétés des fichiers.

OriginalL'auteur Julius | 2012-07-24