Spring Framework中AnnotationController中ModelAndView和ModelMap的问题

时间:2009-07-10 08:45:51

标签: java spring spring-mvc

我有一个问题是ModelAndView和ModelMap之间的一个点差异。

当requestMethod为“GET”且requestMethod为“POST”时,我想维护modelAndView。 我的模型和视图保存了其他人。

所以我将modelAndView返回类型改为“GET”,“POST”方法。

但是,请求丢失了commandObject,form:errors ...,如果请求在“POST”上返回showForm,因为请求验证失败。

例)

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;

}

2 个答案:

答案 0 :(得分:4)

目前尚不清楚你的问题是什么,但对于ModelMap和ModelAndView之间的区别,它们来自Spring MVC的两个不同“代”。 ModelAndView来自Spring 2.0风格,而ModelMap是2.5中引入的。

一般来说,如果你的控制器是Spring 2.0控制器的子类,比如SimpleFormController(我认为你的代码片段是),那么ModelAndView是可以使用的东西。如果您使用的是Spring 2.5 @Controller annotatations,那么最好使用ModelMap。

答案 1 :(得分:0)

我的问题更多地是关于如何在提交时将html表单对象绑定到POJO。

Java代码:

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

    return("NOTHING");
}

HTML代码:

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