2010-10-06 4 views
4

toutes les approches que je fais pour afficher mes erreurs de validation dans un modèle Freemarker échouent. i utiliser la version printemps mvc 3.comment afficher les erreurs de validation dans le modèle Freemarker

Ma forme ressemble que

<@layout.basic> 
<@spring.bind "user" /> 
<#if spring.status.error> 
    <div class="errors"> 
     There were problems with the data you entered: 
     <ul> 
      <#list spring.status.errorMessages as error> 
       <li>${error}</li> 
      </#list> 
     </ul> 
    </div> 
<#else> 
    <div class="errors"> 
     There are no errors. 
    </div> 
</#if> 
<form action="" method="POST"> 
    <dl> 
     <dt>Login:</dt> 
      <dd><@spring.formInput "user.name" /> 
      <dd><@spring.showErrors "<br>" /> 
     <dt>E-Mail:</dt> 
      <dd><@spring.formInput "user.email" /> 
      <dd><@spring.showErrors "<br>" /> 
     <dt>Password:</dt> 
      <dd><@spring.formPasswordInput "user.passwort" /> 
      <dd><@spring.showErrors "<br>" /> 
     <dt>Password verification:</dt> 
      <dd><input type="password" name="passVerification"/> 
      <dd><@spring.showErrors "<br>" /> 
     <dt>Should the User have administrator rights?</dt> 
      <dd><input type="checkbox" name="isAdmin"/> 
      <dd><@spring.showErrors "<br>" /> 
     <br> 
      <dd><input type="submit" value="Create" /> 
    </dl> 
</form> 

Ma mise en page de base ressemble que

<#macro basic> 
<#-- needed for query spring security status --> 
<#assign security=JspTaglibs["http://www.springframework.org/security/tags"] /> 
<!DOCTYPE HTML> 
<html> 
    <head> 
     <title>Testform</title> 
    </head> 
    <body> 
     <div id=header> 
      <@security.authorize ifAnyGranted="ROLE_ADMIN"> 
       <a href='<@spring.url "/user/add" />'>Add user | </a> 
       <a href='<@spring.url "/user/manage" />'>Manage users | </a> 
      </@security.authorize>  
      <@security.authorize ifAnyGranted="ROLE_USER"> 
       <a href='<@spring.url "/job/add" />'>Add job | </a> 
       <a href='<@spring.url "/job/show" />'>Show jobs | </a> 
      </@security.authorize> 
     </div> 
     <div id=errors> 
     </div> 
     <div id=content> 
      <#nested> 
     </div> 
     <div id=footer> 
      <@security.authorize ifAnyGranted="ROLE_USER"> 
       <a href='<@spring.url "/j_spring_security_logout" />'>Logout</a> 
      </@security.authorize> 
     </div> 
    </body> 
</html> 
</#macro> 

je définissais le spring.ftl dans ma config servlet

<property name="freemarkerSettings"> 
    <props> 
     <prop key="auto_import">layout.ftl as layout, spring.ftl as spring</prop> 
    </props> 
</property> 

Et mon contrôleur ressemble à ceci

@RequestMapping(value = "/add", method = RequestMethod.POST) 
public String addUser(
     @RequestParam(value="isAdmin",defaultValue="false") Boolean isAdmin, 
     @RequestParam(value="passVerification") String passVerification, 
     @ModelAttribute("user") C_UserDAO newUser 
) { 
    final BindException errors = new BindException(newUser, "user"); 
    m_userValidator.validate(newUser, errors); 
    ... 
    if(!newUser.getPassword().equals(passVerification) && !newUser.getPassword().equals("")) { 
     errors.rejectValue("password", "user.password.missmatch", "The passwords aren't equal, try again"); 
    } 
    if(errors.hasErrors()) { 
     return "addUserForm"; 
    } 
    ... 
    return "redirect:thanks.html"; 
} 

La validation fonctionne comme un charme, mais quand une erreur occures, la vue ne change pas et aucune erreur est affichée. J'ai lu la documentation encore et encore mais je ne peux pas trouver comment résoudre le problème. Quelle est mon erreur?

Répondre

13

Je ne suis pas familier avec FreeMarker, mais je vois que votre n'est pas associé au modèle. Vous devez l'ajouter à la signature de votre méthode juste après l'attribut de modèle correspondant:

@RequestMapping(value = "/add", method = RequestMethod.POST) 
public String addUser( 
     @RequestParam(value="isAdmin",defaultValue="false") Boolean isAdmin, 
     @RequestParam(value="passVerification") String passVerification, 
     @ModelAttribute("user") C_UserDAO newUser, 
     BindingResult errors 
) { 
    ... 
} 
+0

Hé, je vous remercie pour votre réponse rapide, mais je ne peux pas tester ce code aujourd'hui. Je vais essayer la prochaine fois que je serai @work. – lofthouses

+0

J'ai testé votre indice et ça marche !! Merci encore :) Si je pouvais, je vous voterais;) – lofthouses

Questions connexes