0

J'utilise actuellement hibernate-distribution-3.6.4.Final. Nouveau sur Hibernate Validator.Hibernate Validator récupère les messages d'erreur sans utiliser Spring Framework

Problème: Comment récupérer les messages d'erreur que j'ai obtenus en ajoutant des annotations à la base de données/formbean? Je sais au printemps que tout le monde semble utiliser le fichier messages.properties du classpath? Mais qu'en est-il de pure hibernate 3, y a-t-il un fichier comme celui-ci ou que devrais-je faire à la place? (N'a pas trouvé de bonnes réponses en ligne ...)

Répondre

1

Espérons que cela aidera. La source est: Mastering Spring MVC

Vous devrez ajouter quelques autres éléments pour que la validation fonctionne. Premièrement, le contrôleur doit indiquer qu'il veut un modèle valide pour la soumission du formulaire. Ajout du javax.validation.Valid comme wel comme

import org.hibernate.validator.constraints.Email; 
    import org.hibernate.validator.constraints.NotEmpty; 

annotation au paramètre représentant la forme ne vient que:

@RequestMapping(value = "/profile", method = RequestMethod.POST) 
public String saveProfile(@Valid ProfileForm profileForm, 
BindingResult bindingResult) { 
if (bindingResult.hasErrors()) { 
return "profile/profilePage"; 
} 
System.out.println("save ok" + profileForm); 
return "redirect:/profile"; 
} 

Notez que vous ne redirige pas l'utilisateur si le formulaire contient des erreurs. Cela vous permettra de les afficher sur la même page Web. En parlant de cela, vous devez ajouter une place sur la page Web où ces erreurs seront affichées. Ajouter ces lignes profilePage.html:

<form th:action="@{/profile}" th:object="${profileForm}" 
...."> 
<div class="row"> 
<div class="input-field col s6"> 
<input th:field="${profileForm.twitterHandle}" 
id="twitterHandle" type="text" th:errorclass="invalid"/> 
<label for="twitterHandle">Twitter handle</label> 
<div th:errors="*{twitterHandle}" class="redtext"> 
Error</div> 
</div> 
<div class="input-field col s6"> 
<input th:field="${profileForm.email}" id="email" 
type="text" th:errorclass="invalid"/> 
<label for="email">Email</label> 
<div th:errors="*{email}" class="red-text">Error</div> 
</div> 
</div> 
<div class="row"> 
<div class="input-field col s6"> 
<input th:field="${profileForm.birthDate}" 
id="birthDate" type="text" th:errorclass="invalid" th:placeholder="${ 
dateFormat}"/> 
<label for="birthDate">Birth Date</label> 
<div th:errors="*{birthDate}" class="red-text">Error</ 
div> 
</div> 
</div> 
<div class="row s12"> 
<button class="btn indigo waves-effect waves-light" 
type="submit" name="save">Submit 
<i class="mdi-content-send right"></i> 

</button> 
</div> 
</form> 

Oui En effet, Spring Boot prend soin de créer pour nous un grain de source de message. L'emplacement par défaut pour cette source de message est en

src/main/resources/messages. 
properties. 

Créer un tel paquet, et ajouter le texte suivant:

Size.profileForm.twitterHandle=Please type in your twitter user name 
Email.profileForm.email=Please specify a valid email address 
NotEmpty.profileForm.email=Please specify your email address 
PastLocalDate.profileForm.birthDate=Please specify a real birth date 
NotNull.profileForm.birthDate=Please specify your birth date 
typeMismatch.birthDate = Invalid birth date format 

. enter image description here

+0

Merci beaucoup! Comment pouvons-nous créer le «paquet» que vous avez mentionné pour le hibernation pur? C'est en fait la partie qui m'a le plus dérouté. –

+0

Désolé, ce n'est pas pur Hibernate. Ces annotations proviennent de la spécification JSR-303, qui spécifie la validation du bean. L'implémentation la plus populaire de cette spécification est hibernate-validator, incluse dans Spring Boot. Pour pur Hibernate, vous devez rechercher des documentations –

+0

Désolé, j'ai mal compris votre question. Je pensais que vous avez demandé la mise en œuvre du printemps. –