模型数据-如何放入request域中

自动放入request域中

springmvc 会自动把获取的 model 模型,放入到 request 域中
验证代码
后端获取了master对象,这时就自动的把对象传到request域中了,为了验证这个猜想,我们需要从前端的jsp中看是否可以在request中取到master。

    //验证自动放入request域
    @RequestMapping("/master2")
    public String javaBean2(Master master){
        return "request";
    }

前端jsp,利用el表达式取到master

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
id:${requestScope.master.id}<br>
name:${requestScope.master.name}<br>
petname:${requestScope.master.pet.name}<br>
petage:${requestScope.master.pet.age}<br>
</body>
</html>

默认存放在requset中的属性名为类的类型名 首字母小写

验证
改名传入类的变量名,看看是否会改变。若改变后,前端将无法使用master拿到值了,则与变量名有关,反之若可以拿到,就与类的类型名有关。

//    验证requset属性名为类的类型名首字母小写
@RequestMapping("/master1")
public String javaBean1(Master master100){
    System.out.println(master100);
    return "request";
}

前端

id:${requestScope.master.id}<br>
name:${requestScope.master.name}<br>
petname:${requestScope.master.pet.name}<br>
petage:${requestScope.master.pet.age}<br>

HttpServletRequest添加属性到request域中

利用之前说到的servletApi知识点获取HttpServletRequest对象放入属性和属性值

    //验证HttpServletRequest存requset域中:
    @RequestMapping("/master3")
    public String javaBean3(Master master, HttpServletRequest request){
        request.setAttribute("myname","ayou");
        return "request";
    }

前端

myname:${requestScope.myname}

把Map中的数据添加到request域中

springMVC会把map中的k-v遍历存在request域中,若存放的是名称和springMVC自动放入的对象名称(默认存放在requset中的属性名为类的类型名 首字母小写)一样就会代替

//    map的k-v放入到request域对象中
    @RequestMapping("/master4")
    public String javaBean4(Master master, Map<String,Object> map){
        map.put("myname","hahaha");
		map.put("master",null);//把默认的master置空
        return "request";
    }

ModelAndView添加到request域中

和map的机制类似

  1. 从本质看,请求响应的方法 return "xx", 是返回了一个字符串,其实本质是返回了一个
    ModelAndView 对象,只是默认被封装起来的.
  2. ModelAndView 即可以包含 model 数据,也可以包含视图信息
  3. ModelAndView 对象的 addObject 方法可以添加 key-val 数据,默认在 request 域中
  4. ModelAndView 对象 setView 方法可以指定视图名称
   //返回ModelAndView对象,将数据放入到Request域中
    @RequestMapping("/master5")
    public ModelAndView javaBean5(Master master100, ModelAndView modelAndView){
        //放入属性到ModelAndView
        modelAndView.addObject("myname","geigeili");
        //指定跳转到的页面
        modelAndView.setViewName("request");
        //返回结果
        return modelAndView;
    }

把数据放入session域中

    //把数据放入session域中
    @RequestMapping("/master6")
    public String javaBean6(Master master100, HttpSession httpSession){
        //通过setAttribute放入属性
        httpSession.setAttribute("master" ,master100);
        httpSession.setAttribute("myname","wuyiwuaa");
        return "request";
    }

@ModelAttribute

在某个方法上,增加了@ModelAttribute 注解后,那么在调用该 Handler 的任何一个方法时,都会先调用这个方法

    //@ModelAttibute
    @ModelAttribute
    public void prepareData(){
        System.out.println("先调用我哦");
    }

应用实例
修改用户信息(就是经典的使用这种机制的应用),流程如下:

  1. 在修改前,在前置方法中从数据库查出这个用户
  2. 在修改方法(目标方法)中,可以使用前置方法从数据库查询的用户
  3. 如果表单中对用户的某个属性修改了,则以新的数据为准,如果没有修改,则以数据库的信息为准,比如,用户的某个属性不能修改,就保持原来的值
posted @ 2024-03-23 11:08  尤所不同  阅读(7)  评论(0编辑  收藏  举报