2010-04-27 4 views
0

J'essaie de comprendre comment la liaison des objets fonctionne au printemps mvc. J'ai un contrôleur configuré comme suit, et je veux que le modèle Freemarker se lie au accessRequestBean. Dans le modèle j'ai '< @ spring.bind "command.accessRequestBean" />' mais cela provoque des erreurs ... Comment lier un formulaire à un POJO?Printemps MVC POJO Bind Explication

@Controller 
@PreAuthorize("isAuthenticated()") 
@RequestMapping("/access") 
public class RemoteVendorAccessController { 
    private Logger logger = Logger.getLogger(this.getClass().getName()); 

    @Autowired 
    private AdDao adDao; 

    @Autowired 
    private CadaDao cadaDao; 

    @Autowired 
    private UserAccessCache userAccessCache; 

    private AccessRequestBean accessRequestBean; 

    @RequestMapping(method = RequestMethod.GET) 
    public String requestAccess(ModelMap map){ 
     String username = SecurityContextHolder.getContext().getAuthentication().getName(); 
     map.addAttribute("title", "Remote Vendor Access Request Form"); 

     try { 
      AdUser user = adDao.getUserFromNt(username); 
      map.addAttribute("user", user); 
     } catch (UserDoesNotExistException e) { 
      String error = "Could not get user information from AD"; 
      map.addAttribute("error", error); 
      logger.error(error + "[" + username + "]", e); 
     } 

     // Get users manager 
     AdUser manager = null; 
     try { 
      manager = adDao.getManagerFromNt(username); 
      map.addAttribute("manager", manager);   
     } catch (Exception e) { 
      String error = "Could not get manager information from AD"; 
      map.addAttribute("error", error); 
      logger.error(error + "[" + username + "]", e); 
     } 

     return("access"); 
    } 

    @RequestMapping(method = RequestMethod.POST) 
    public String processRequest(ModelMap map){ 
      // Want to validate POJO bean here   
     return(null); 
    } 

    public AccessRequestBean getAccessRequestBean() { 
     return accessRequestBean; 
    } 

    public void setAccessRequestBean(AccessRequestBean accessRequestBean) { 
     this.accessRequestBean = accessRequestBean; 
    } 


} 

Répondre

2

Selon le Spring Documentation, le contrôleur obtient une référence à l'objet contenant les données saisies dans le formulaire à l'aide de l'annotation @ModelAttribute sur un paramètre de méthode. Le type de paramètre est votre classe POJO qui correspond à l'objet utilisé pour construire le formulaire sur le modèle d'édition. c'est-à-dire

@RequestMapping(method = RequestMethod.POST) 
public String processRequest(
     @ModelAttribute POJO pojo, 
     BindingResult result, 
     ModelMap map){ 
    new POJOValidator().validate(pojo, result); 
    if (result.hasErrors()) { 
     return "pojoForm"; 
    } 
    . 
    . 
    . 
    return(null); 
} 
+0

maintenant, une fois le validateur terminé et s'il y a une erreur, comment accéder aux erreurs BidingResult? Utilisation spécifique de freemarker? avoir quelques problèmes à comprendre. – wuntee