2009-07-10 3 views
1

J'ai une question qui est une différence de point entre ModelAndView et ModelMap.Problème avec ModelAndView et ModelMap dans AnnotationController, Springframework

Je souhaite gérer modelAndView lorsque requestMethod est "GET" et que requestMethod est "POST". Mon modelAndView a enregistré les autres. J'ai donc fait un retour type modelAndView aux méthodes "GET", "POST". Mais, Request lost commandObject, forme: errors ..., si la requête renvoie showForm sur "POST" car la validation de la requête a échoué.

exemple)

private ModelAndView modelAndView;  

public ControllerTest{ 
    this.modelAndView = new ModelAndView(); 
} 

@RequestMapping(method = RequestMethod.GET) 
public ModelAndView showForm(ModelMap model) { 
    EntityObject entityObject = new EntityObject(); 
    CommandObject commandObject = new CommandObject(); 
    commandObject.setEntityObject(entityObject); 
    model.addAttribute("commandObject", commandObject); 
    this.modelAndView.addObject("id", "GET"); 
    this.modelAndView.setViewName("registerForm"); 

    return this.modelAndView; 
} 

@RequestMapping(method = RequestMethod.POST) 
public ModelAndView submit(@ModelAttribute("commandObject") CommandObject commandObject, 
     BindingResult result, SessionStatus status) { 

    this.commandValidator.validate(commandObject, result); 

    if (result.hasErrors()) { 
     this.modelAndView.addObject("id", "POST"); 
     this.modelAndView.setViewName("registerForm"); 
     return this.modelAndView; 

    } else { 
     this.modelAndView.addObject("id", "after POST"); 
     this.modelAndView.setViewName("success"); 
    } 
    status.setComplete(); 
    return this.modelAndView; 

} 

Répondre

4

Il est pas clair ce que votre question est, mais à la différence entre ModelMap et ModelAndView, ils viennent de deux « générations » de Spring MVC. ModelAndView est issu du style Spring 2.0, alors que ModelMap a été introduit en 2.5. En règle générale, si votre contrôleur sous-classe un contrôleur Spring 2.0, tel que SimpleFormController (que je pense être votre fragment de code), alors ModelAndView est la chose à utiliser. Si vous utilisez des annotations Spring 2.5 @Controller, ModelMap est préférable.

0

Ma question était plus orientée sur la façon de lier des objets de formulaire html à un POJO sur soumettre.

code Java:

@RequestMapping(method = RequestMethod.POST) 
public String processRequest(ModelMap map, @ModelAttribute("accessRequestBean") AccessRequestBean accessRequestBean){ 
    logger.debug(accessRequestBean); 

    return("NOTHING"); 
} 

Code HTML:

<@spring.bind "accessRequestBean" /> 
    <form> 
    ... 
Questions connexes