SpringMVC模型数据解析

SpringMVC模型数据解析

​ jsp四大作用域对应的内置对象:pageContext,request,session,application.

模型数据的绑定是由ViewResolver来完成的,实际开发过程中,我们需要先添加模型数据,再交给·ViewResolver来绑定。

​ Spring MVC提供了以下几种方式添加模型数据:

  • Map
  • Model
  • ModelAndView
  • @SessionAttribute
  • @ModelAttribute

map的使用

控制类

package com.soutwind.controller;

import com.soutwind.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Map;

@Controller
@RequestMapping("/view")
public class ViewHandler {
    @RequestMapping("/map")
    public String map(Map<String,User> map){//map中key值类型是string,value值类型是User
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        //通过map把user对象传给view视图,并且把user放到request里面。map的key作为request的key,map的
        //map的value作为request的value。页面的request里面会存在一个KEY值为user,value值为user对象的数据。
        map.put("user",user);
        //如果只是单纯的返回视图没啥意义,需要把user对象的内容传给视图。
        return "view";
    }
}

jsp:

<%--
  Created by IntelliJ IDEA.
  User: DELL
  Date: 2023/2/12
  Time: 10:15
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--表示不会忽略el表达式,去解析el表达式--%>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--el表达式输出user对象--%>
        ${requestScope.user}
</body>
</html>

2.model

@RequestMapping("/model")
public  String model(Model model){
   //导入包 import org.springframework.ui.Model;ui就是用户接口。
    User user = new User();
    user.setId(1L);
    user.setName("李四");
    //model原理同map。
    //业务方法里会向model里面存一个对象,来到视图,他会把model里面的值
    //以键值对的形式存储到request里面,再通过jsp的标签取出。
    model.addAttribute("user",user);
    return "view";
}

3.modelAndView

 @RequestMapping("/modelAndView")
    public ModelAndView modelAndView(){
        User user = new User();
        user.setId(1L);
        user.setName("王五");
        //modelandview相当于model和view的整合
//        model.addAttribute("user",user);
//        return "view";把这两行代码的操作整合到ModelandView里面。
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("user",user);
        modelAndView.setViewName("view");
        return modelAndView;
    }
    @RequestMapping("/modelAndView2")
    public ModelAndView modelAndView2(){
        User user = new User();
        user.setId(1L);
        user.setName("赵六");
        //modelandview相当于model和view的整合
//        model.addAttribute("user",user);
//        return "view";把这两行代码的操作整合到ModelandView里面。
        ModelAndView modelAndView2= new ModelAndView();
        modelAndView2.addObject("user",user);
        //View是一个接口,请求地址是物理地址
        View view = new InternalResourceView("/view.jsp");
        //modelandView应用非常灵活。
        modelAndView2.setView(view);//这里传过去的是一个view对象。
        return modelAndView2;
    }
    //modelandView的优化。
    @RequestMapping("/modelAndView3")
    public ModelAndView modelAndView3(){
        User user = new User();
        user.setId(1L);
        user.setName("周七");
        //modelandview相当于model和view的整合
//        model.addAttribute("user",user);
//        return "view";把这两行代码的操作整合到ModelandView里面。
        ModelAndView modelAndView = new ModelAndView("view");
        modelAndView.addObject("user",user);
//        modelAndView.setViewName("view");在创建modelAndView里面就可以给View的名字它赋值。
        return modelAndView;
    }
    @RequestMapping("/modelAndView4")
    public ModelAndView modelAndView4(){
        User user = new User();
        user.setId(1L);
        user.setName("吕八");
        //modelandview相当于model和view的整合
//        model.addAttribute("user",user);
//        return "view";把这两行代码的操作整合到ModelandView里面。
        View view = new InternalResourceView("/view.jsp");
        ModelAndView modelAndView= new ModelAndView("view");
        modelAndView.addObject("user",user);
        //View是一个接口,请求地址是物理地址

        //modelandView应用非常灵活。
//        modelAndView.setView(view);//这里传过去的是一个view对象。
        return modelAndView;
    }
    @RequestMapping("/modelAndView5")
    public ModelAndView modelAndView5(){
        User user = new User();
        user.setId(1L);
        user.setName("冯九");
       Map<String ,User> map = new HashMap<>();
       map.put("user",user);
//        View view = new InternalResourceView("/view.jsp");
        ModelAndView modelAndView= new ModelAndView("view",map);
        modelAndView.addObject("user",user);
        //View是一个接口,请求地址是物理地址
//        modelAndView.setView(view);//这里传过去的是一个view对象。
        return modelAndView;
    }
    @RequestMapping("/modelAndView6")
    public ModelAndView modelAndView6(){
        User user = new User();
        user.setId(1L);
        user.setName("陈十");
        Map<String ,User> map = new HashMap<>();
        map.put("user",user);
        View view = new InternalResourceView("/view.jsp");
        ModelAndView modelAndView= new ModelAndView("view",map);
//        modelAndView.addObject("user",user);
        //View是一个接口,请求地址是物理地址
//        modelAndView.setView(view);//这里传过去的是一个view对象。
        return modelAndView;
    }
    @RequestMapping("/modelAndView7")
    public ModelAndView modelAndView7(){
        User user = new User();
        user.setId(1L);
        user.setName("哈十一");

        ModelAndView modelAndView= new ModelAndView("view","user",user);
//        modelAndView.addObject("user",user);
        //View是一个接口,请求地址是物理地址
//        modelAndView.setView(view);//这里传过去的是一个view对象。
        return modelAndView;
    }

上述方法的添加是先放到model里面,再添加到request里面。也可以直接向request里面添加。

4.也可以直接向request里面添加。

@RequestMapping("/request")
   public String request(HttpServletRequest request){
       User user =new User();
       user.setId(1l);
       user.setName("张三");
       request.setAttribute("user",user);
       return "view";
}

5.@ModelAttribute

  • 定义一个方法,该方法专门用来返回要填充到模型数据中的对象。
  • 业务方中无需再处理模型数据,只需要返回视图即可。
//在业务方法中,@ModelAttribute修饰的方法要先于@RequestMapping修饰的方法执行。
@ModelAttribute
public User getUser(){
    User user = new User();
    user.setId(1L);
    user.setName("张十三");
    return  user;
}
 @RequestMapping("/modelAttribute")
    public  String modelAttribute(){
        return "view";
    }

posted on 2023-02-12 14:13  张铁蛋666  阅读(29)  评论(0编辑  收藏  举报

导航