SpringMVC第六阶段:数据在域中的保存(02)

数据在域中的保存(02)

1、Map或Model或ModelMap形式保存数据在request域中

在四个域中,我们使用最频繁的域就是request对象。往request域对象中,保存数据,还在以下的几种形式。
我们可以在Controller的方法中,添加Map类型的参数,或者是Model类型的参数。或者是ModelMap类型的参数。都可以直接用来保存域数据到Request对象中。

Map全类名是:

java.util.Map
@RequestMapping(value = "/mapToRequest")
public String mapToRequest(Map<String,Object> map){
    System.out.println(" mapToRequest() 方法调用了 ");
    // 我们把数据保存到Map中,这些数据也会自动的保存到Reqeust域中.
    map.put("mapKey1", "mapValue1");
    map.put("mapKey2", "mapValue2");

    return "ok";
}

Model全类名是:

org.springframework.ui.Model
@RequestMapping(value = "/modelToRequest")
public String modelToRequest(Model model){
    System.out.println(" modelToRequest() 方法调用了 ");
    // 我们把数据保存到 model 中,这些数据也会自动的保存到Reqeust域中.
    model.addAttribute("modelKey1", "modelValue1");
    model.addAttribute("modelKey2", "modelValue2");

    return "ok";
}

ModelMap全类名是:

org.springframework.ui.ModelMap
@RequestMapping(value = "/modelMapToRequest")
public String modelMapToRequest(ModelMap modelMap){
    System.out.println(" modelMapToRequest() 方法调用了 ");
    // 我们把数据保存到 model 中,这些数据也会自动的保存到Reqeust域中.
    modelMap.addAttribute("modelMapKey1", "modelMapValue1");
    modelMap.addAttribute("modelMapKey2", "modelMapValue2");

    return "ok";
}

隐含模型对象 :

 /**
     * 不管你是Map,还是Model,还是ModelMap,他们都是 BindingAwareModelMap 类 
* class org.springframework.validation.support.BindingAwareModelMap
* /\ * || * || * BindingAwareModelMap extends ExtendedModelMap * /\ * || * || * ExtendedModelMap extends ModelMap implements Model * /\ * || * || * ModelMap extends LinkedHashMap * * * BindingAwareModelMap 类是隐含模型对象!!!
* BindingAwareModelMap 隐含模型中一般都用来保存 视图渲染时 需要的数据
* 视图 就是页面 ( jsp页面 ) * 渲染 执行 */
@RequestMapping(value = "/mapAndModelAndModelMap") public String mapAndModelAndModelMap( Map map , Model model , ModelMap modelMap ){ // org.springframework.validation.support.BindingAwareModelMap System.out.println( map ); System.out.println( model ); System.out.println( modelMap ); System.out.println(" 最美分隔线================================== "); map.put("mapKey1", "mapValue1"); System.out.println( map ); System.out.println( model ); System.out.println( modelMap ); System.out.println(" 最美分隔线================================== "); model.addAttribute("modelKey1", "modelValue1"); System.out.println( map ); System.out.println( model ); System.out.println( modelMap ); System.out.println(" 最美分隔线================================== "); modelMap.addAttribute("modelMapKey1", "modelMapValue1"); System.out.println( map ); System.out.println( model ); System.out.println( modelMap ); System.out.println(" 最美分隔线================================== "); System.out.println( map.getClass() ); System.out.println( model.getClass() ); System.out.println( modelMap.getClass() ); return "ok"; }

2、ModelAndView方式保存数据到request域中

@RequestMapping(value = "/modelAndViewToReqeust")
public ModelAndView modelAndViewToReqeust(){
    ModelAndView modelAndView = new ModelAndView("ok");

    //使用 ModelAndView 返回值保存数据到 Reqeuat 域中
    modelAndView.addObject("mavKey1", "mavValue1");
    modelAndView.addObject("mavKey2", "mavValue2");

    return modelAndView;
}

3、@SessionAttributes保存数据到Session域中

@SessionAttributes 注解可以标注在类上。它的作用是指定隐含模型中哪些数据可以保存到Session域中。

@SessionAttributes(value = { "key1","key2" }, types = { String.class, Book.class })

value属性,它表示把request域中key为key1,key2的键值对信息,也保存到Session中
types属性,它表示把request域中value类型为String.class或Book.class类型的键值对,也保存到Session中

/**
 * @SessionAttributes 可以指定哪些隐含模型中的数据也同步保存到Session域中 
* names 属性设置哪些 key 数据保存到Session中
* types 属性设置哪些类型的 value 属性也同步到Session中
*/
@SessionAttributes(types = {Integer.class,String.class}) @Controller public class ScopeController { @RequestMapping(value = "/sessionAttrubute") public String sessionAttrubute(Map<String,Object> map){ System.out.println(" sessionAttrubute() 方法调用了 "); // 我们把数据保存到Map中,这些数据也会自动的保存到Reqeust域中. map.put("mapKey1", "字符串类型"); map.put("mapKey2", new Integer(100)); return "ok"; } }

4、@ModelAttribute注解

@ModelAttribute这个注解可以标注在方法和参数上。
@ModelAttribute三个常见作用:
1、被标注了@ModelAttribute的方法都会在Controller的目标方法之前执行。
2、目标方法的参数(JavaBean对象)会先从隐含模型中获取值传入。( 参数会覆盖隐含模型中的值 )
3、被标注在参数上,参数值会按照指定的key从隐含模型中获取值。

@ModelAttribute
public void modelAttributeFun( Map<String,Object> map ){
    // 可以为目标方法准备数据
    System.out.println(" modelAttributeFun() 方法被调用了 ");
    map.put("book1",new Book(100,"国哥,为什么你这么帅,帅的不要不要的!"));
}

/**
 * 目标方法的参数,如果是JavaBean,SpringMVC会先把这个参数的类型
 * 取类名Book,然后首字母小写.然后到隐含模型中取值传入
*/
@RequestMapping(value = "/target") public String target( @ModelAttribute("book1") Book book){ System.out.println(" target() 方法调用了 =====>>>> " + book); return "ok"; }

你可能感兴趣的:(Java,java,servlet,spring)