springmvc中Model和ModelAndView

一、基础

  1. Model
    是数据容器,只负责存放数据,不保存视图名称。
java 复制代码
public class Usercontroller1 {
@RequestMapping("/test1")//映射地址
    public  String test1(Model model){//传对象参数
    System.out.println(model);
        model.addAttribute("model","springmvc1234");
        return "test";//页面WEB-INF/jsp/test.jsp
    }

返回值 String:代表跳转的视图名
数据放 Model,视图名单独 return

  1. ModelAndView(常用主流)
    同时封装两部分:Model(数据) + View(视图名称)
java 复制代码
 ModelAndView mv = new ModelAndView();
        mv.addObject("msg1","spring");//保存数据k-v模式
        mv.addObject("m",new User("123"));
        mv.setViewName("hello");//跳转set的页面并且在其中取值
        return mv;

二、常用方法

Model:

java 复制代码
model.addAttribute("key",value);
model.addAllAttributes(map);

ModleAndView:

java 复制代码
mav.addObject("key",value);   //存数据
mav.setViewName("login");     //设置视图
//支持转发、重定向
mav.setViewName("forward:/user/list");
mav.setViewName("redirect:/login");

日常开发大多数使用 Model + 返回 String,代码简洁;
如果需要在方法内部多处动态切换视图,适合使用 ModelAndView

三、区别

Model:仅存储数据,视图名称由方法返回字符串提供;
ModelAndView:同时包含数据和视图名称,封装为一个对象;
两者数据都存放在 request 域,一次请求有效;
视图解析器最终根据视图名跳转页面。

java 复制代码
//方式1 Model + String
public String demo(Model model){
    model.addAttribute("name","张三");//存值
    return "index";//返回值=页面
}

//方式2 ModelAndView
public ModelAndView demo(){
    ModelAndView mav=new ModelAndView();
    mav.addObject("name","张三");//存值
    mv.setViewName("hello");//跳转set的页面并且在其中取值
    return mav;
}

封装(三大特性)

权限控制:private属性 + get/set,保护数据。

封装成对象

功能:把一组相关数据整合在一起,方便传输、保存。

相关推荐
程序喵大人43 分钟前
【C++进阶】STL算法与函数对象 - 02 sort为什么需要随机访问迭代器
开发语言·c++·算法
SomeB1oody1 小时前
【RustyML入门】2.6. 线性判别分析
开发语言·后端·机器学习·rust·教程
Fanta丶1 小时前
10.Python class类的定义和魔术方法
python
用户昵称1002 小时前
C/C++编程-工程实践-本地存储log的工程意义
c语言·开发语言
小玮看世界3 小时前
[Python]从“脏”数据到优雅实现:一个IoT滑动窗口最大值问题的测试驱动优化实录
linux·前端·python
吹什么轩3 小时前
c++复习:map和set的使用
开发语言·c++
必须得开心呀3 小时前
qt生成dump文件并定位异常
开发语言·qt
MC皮蛋侠客3 小时前
SQLAlchemy 系列(十一):从 1.x 到 2.x——渐进迁移与数据访问层治理
数据库·python
fpcc3 小时前
跟我学C++中级篇—内存流
开发语言·c++