SpringMVC_处理模型数据

处理模型数据之ModelAndView

—SpringMVC提供了以下几种途径输出模型数据:

    - ModelAndView:处理方法返回值类型为ModelAndView时,方法即可通过该对象添加模型数据。

    - Map及Model:入参为org.springframework.ui.Model、org.springframework.ui.ModelMap、java.util.Map时,处理方法返回值时,Map中的数据会自动添加到模型中。

    - @SessionAttributes:将模型中的某个数据暂存到HttpSession中,以便多个请求间可以共享这个属性。

    - @ModelAttribute:方法入参标注该注解后,入参的对象就会放到数据模型中。


ModelAndView

- 控制器处理方法的返回值如果为ModelAndView,则其包含视图信息,也包含模型数据信息

- 添加模型数据:

    —ModelAndView addObject(String attributeName,Object attributeValue)

    —ModelAndView addAllObject(Map<String,?> modelMap)

- 设置视图:

    —void setView(View view)

    —void setViewName(String viewName)

/**
 * 目标方法的返回值可以是ModelAndView类型
 * 其中可以包含视图和模型信息
 * SpringMVC会把ModelAndView的model中数据放入到request域对象中
 * @return
 */
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
    String viewName = SUCCESS;
    ModelAndView mv = new ModelAndView(viewName);
    //添加模型数据到ModelAndView中
    mv.addObject("time",new Date());
    return mv;
}


处理模型数据之Map及Model

- SpringMVC在内部使用了一个 org.springframework.ui.Model 接口存储模型数据

- 使用步骤:

    —SpringMVC在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器

    —如果方法的入参为Map或Model类型,SpringMVC会将隐含模型的引用传给这些入参,在方法体内开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的模型数据。

/**
 * 目标对象可以添加Map类型的参数,也可以是Model类型或MedelMap类型
 * @param map
 * @return
 */
@RequestMapping("/testMap")
public String testMap(Map<String,Object> map){
    System.out.println(map.getClass().getName());
    map.put("names", Arrays.asList("Tom","Jerry","Mike"));
    return SUCCESS;
}
处理模型数据之@SessionAttributes注解

- 若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个@SessionAttributes注解,SpringMVC将在模型中对应的属性暂存到HttpSession中

- @SessionAttributes除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中

    —@SessionAttributes(type = User.class)会将隐含模型中的所有类型为User.class的属性添加到会话中

    —@SessionAttributes(value = {“user1”“user2”})

    —@SessionAttributes(types = {User.class,Dept.class})

    —@SessionAttributes(value = {“user1”,“user2”},types = {Dept.class})

/**
 * @SessionAttributes 除了可以通过属性名,指定需要放到会话中的属性外(实际上使用的是value属性值)
 * 还可以通过模型属性的对象类型指定哪些模板属性需要放到会话中(实际上是使用的是types属性值)
 *
 * 注意:该注解只能放在类的上面,而不是修饰方法上
 *
 * @param map
 * @return
 */
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Map<String,Object> map){
    System.out.println(map.getClass().getName());
    User user = new User("Tom","Jerry",14,"Mike");
    map.put("user", user);
    return SUCCESS;
}

ModelAttribute注解使用场景










猜你喜欢

转载自blog.csdn.net/qq_30604989/article/details/80640995