Basavaraj
Basavaraj

Reputation: 1111

What are the differences between Model, ModelMap, and ModelAndView?

What are the main differences between the following Spring Framework classes?

Using Model.put(String,Object) we can access the values in .jsp files, but ModelMap.addAttribute(String,Object) also did same thing. I do not understand the difference between these classes.

Upvotes: 85

Views: 73891

Answers (3)

Vikas Harle
Vikas Harle

Reputation: 387

Differences between Model, ModelMap, and ModelAndView

Model: It is an Interface. It defines a holder for model attributes and primarily designed for adding attributes to the model.

Example:

@RequestMapping(method = RequestMethod.GET)
    public String printHello(Model model) {
          model.addAttribute("message", "Hello World!!");
          return "hello";
       }

ModelMap: Implementation of Map for use when building model data for use with UI tools.Supports chained calls and generation of model attribute names.

Example:

@RequestMapping("/helloworld")
public String hello(ModelMap map) {
    String helloWorldMessage = "Hello world!";
    String welcomeMessage = "Welcome!";
    map.addAttribute("helloMessage", helloWorldMessage);
    map.addAttribute("welcomeMessage", welcomeMessage);
    return "hello";
}

ModelAndView: This class merely holds both to make it possible for a controller to return both model and view in a single return value.

Example:

@RequestMapping("/welcome")
public ModelAndView helloWorld() {
        String message = "Hello World!";
        return new ModelAndView("welcome", "message", message);
    }

Upvotes: 37

Ashu
Ashu

Reputation: 499

Model: is an interface it contains four addAttribute and one merAttribute method.

ModelMap: implements Map interface. It also contains Map method.

ModelAndView: As Bart explain it allows a controller return both as a single value.

Upvotes: 14

Bart
Bart

Reputation: 17361

Model is an interface while ModelMap is a class.

ModelAndView is just a container for both a ModelMap and a view object. It allows a controller to return both as a single value.

Upvotes: 83

Related Questions