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,保护数据。

封装成对象

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

相关推荐
OKkankan1 分钟前
Python常用容器与导入语法详解(二)
数据结构·python
维基框架9 分钟前
坊间传闻 OpenAI 将要发布GPT-6 Sol 模型
人工智能·pytorch·python
读研的武12 分钟前
Python异步编程
python
宸津-代码粉碎机24 分钟前
Java面试核心:JVM三大GC垃圾回收算法原理与生产场景落地分析
java·大数据·人工智能·python·spring
小静AI工程实验室31 分钟前
Codex 实用教程:Windows、macOS、Linux 安装配置到首个可验收项目
人工智能·python·开发工具·codex
邪修king41 分钟前
Re:Linux 系统篇(二十九):动静态库Chapter2:动态库深度辨析 —— 核心本质、制作流程、双阶段查找模型与排错指南
android·java·linux·开发语言
黑马水牛1 小时前
Carla仿真系列:17_利用Carla仿真环境跑通3DGS——从采集360张图到高斯泼溅建模
python·ros·colmap·3dgs·新视角合成·carla仿真·三维建图
泡海椒1 小时前
告别 iText 繁杂配置:jquick-pdf 极简 PDF 生成实战(零基础上手)
java·开发语言·pdf
赵大仁2 小时前
极空间 NAS 没有命令行,我逆向了它的桌面客户端
python·ai编程·nas·mcp·极空间
空白3 小时前
Power BI +VBA 【数据分析】
python