SpringMVC中将数据输出到页面的几种常用方式
想要将数据拿到页面给展现出来,最容易想到的是放到WEB域中,然后再取出,这篇文章记录一下不同于传统的WEB域数据输出的几种方式
使用 Map、Model、ModelMap进行传值
Spring MVC 在内部使用了一个org.springframework.ui.Model接口存储模型数据 具体步骤:
- 1、Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。
- 2、如果方法的入参为 Map 或 Model 类型,Spring MVC 会将隐含模型的引用传递给这些入参。在方法体内,开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据。
示例:
Model演示
@RequestMapping("/outputData")public String output1(Model model){model.addAttribute("msg", "我是output1()");return "hello";}
jsp页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>Title</title>
</head>
<body><h1>${msg}</h1>
</body>
</html>
浏览器访问:
Map演示
@RequestMapping("outputData1")public String output2(Map map){map.put("msg", "我是output2()");return "hello";}
浏览器访问:
ModelMap演示
@RequestMapping("outputData2")public String output3(ModelMap modelMap){modelMap.addAttribute("msg", "我是output3()");return "hello";}
浏览器访问:
Map、Model、ModelMap:最终都是保存在 BindingAwareModelMap 在工作。这些参数里面保存的所有数据都会在请求域中,这几种方式传递的值只能通过request获取。
ModelAndView传值
控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息。
添加模型数据:
- MoelAndView addObject(String attributeName, Object attributeValue)
- ModelAndView addAllObject(Map<String, ?> modelMap)
设置视图: - void setView(View view)
- void setViewName(String viewName)
- 也可以在对象创建时通过构造器设置视图
@RequestMapping("/outputData3")public ModelAndView output4(){ModelAndView modelAndView = new ModelAndView("hello");modelAndView.addObject("msg", "我本楚狂人,凤歌笑孔丘");return modelAndView;}@RequestMapping("/outputData4")public ModelAndView output5(){ModelAndView modelAndView = new ModelAndView();modelAndView.setViewName("hello");modelAndView.addObject("msg", "我本楚狂人,凤歌笑孔丘");return modelAndView;}
访问任意一个结果都是一样的。
浏览器访问:
@SessionAttributes
- 若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个@SessionAttributes, Spring MVC 将在模型中对应的属性暂存到 HttpSession 中。
- @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中
- @SessionAttributes(types=User.class) 会将隐含模型中所有类型为 User.class 的属性添加到会话中。
- @SessionAttributes(value={“user1”, “user2”})
- @SessionAttributes(types={User.class, Dept.class})
- @SessionAttributes(value={“user1”, “user2”}, types={Dept.class})
示例:
@Controller
@SessionAttributes(value = "msg")
public class HelloController {@RequestMapping("/session1")public String sessionTest1(Model model){model.addAttribute("msg", "我本楚狂人,凤歌笑孔丘");return "hello";}
jsp页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>Title</title>
</head>
<body><h1>${requestScope.msg}</h1><hr><h1>${sessionScope.msg}</h1>
</body>
</html>
结构:
注意:
- 给BindingAwareModelMap中保存的数据,或者在ModelAndView中的数据,同时给session中放一份;
- Value的值就是保存数据是要给session中放的数据的key,这个key的值要和在ModelAndView、BindingAwareModelMap中保存数据的key的值一样,否则不会保存到session中即:BindingAwareModelMap中保存了数据,但是value的值不包含保存数据的key,就不能存在session中去。
- @SessionAttributes(value={“msg”, “haha”}):保存多个数据到session中去。
- @SessionAttributes(types = {String.class}):根据保存在BindingAwareModelMap、ModelAndView中的数据的类型只要与这个注解设置的相同,就保存在session,数据的key与BindingAwareModelMap、ModelAndView中保存的数据的key相同。
@ModelAttribute
- 在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了 @ModelAttribute 的方法。
- 在方法的入参前使用 @ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参将方法入参对象添加到模型中
使用场景
如果我们执行某一个请求映射方法之前,想要相对数据进行一些处理,则可以使用@ModelAttribute注解。
@RequestMapping("/peopleTest")public String test(@ModelAttribute("people") People people, Model model){System.out.println(people);return "hello";}@ModelAttributepublic void before(Model model){People people = new People("张三", 18, new Department(1, "营销部"));model.addAttribute("people", people);}
浏览器访问:
控制台输出:
在before方法的参数Model中存放数据,实际上还是存放在BindingAwareModelMap中,标注在目标方法的参数中,通过key的值,取出刚刚在Map中保存的数据。
值的注意的是:在这两个方法中,参数ModelMap指的是同一个BindingAwareModelMap,@ModelAttribute标注的参数people,与存放在存放在Model中的是指向同一个.
ModelAttribute执行流程图
SpringMVC中将数据输出到页面的几种常用方式相关推荐
- matlab中将数据保存为txt文件_matlab中将数据输出保存为txt格式文件的方式
将matlab中数据输出保存为txt 格式总结网上各大论坛,主要有三种 方法. 第一种方法 :save(最简单基本 具体的命令是:用save*.txt -ascii 为函数*.txt 为文件名,该文件 ...
- request转发,response重定向,异步请求json数据输出到页面
request转发: //转发到index.jsp页面request.getRequestDispatcher("index.jsp").forward(request, resp ...
- 将数据渲染到页面的几种方式
将数据渲染到页面的几种方式: 1.字符串拼接: 2.dom回流 3.文档碎片(文档碎片节点:documentFragment) 4.模板 (下章会详细介绍模板) 转载于:https:/ ...
- python 读写数据文件的6种常用方式
本文主要介绍python读写数据文件的6种常用方式. 1. python内置方法 with open(r'test.xlsx') as f:a = f.read() 一般,在应用上述上下文管理器后,可 ...
- FME教程:表格数据分组统计总数的三种实现方式
在FME中进行表格数据分组统计总数的三种方式,实现类似SQL中分组统计总数的功能. 一.业务场景 现在有图1所示的一份Excel表格数据,要求统计每个村的户数,如图2所示. 图1 Excel表格数据 ...
- matlab中将数据保存为txt文件_matlab中将数据输出保存为txt格式文件的方法
将matlab中数据输出保存为txt或dat格式总结网上各大论坛,主要有三种方法. 第一种方法:save(最简单基本的) 具体的命令是:用save *.txt -ascii x x为变量 *.txt为 ...
- mybatis plus当月数据查询_mybatis plus的3种查询方式(小结)
本文是基于springboot框架下的查询. 一:基本配置: 1.仓库依赖 alimaven aliyun maven http://maven.aliyun.com/nexus/content/gr ...
- SpringMVC请求后台地址URL没有.*的几种实现方式
今天做项目,由于项目是通过扫二维码进入,二维码存放的地址不希望有 .do,而是http:xxxx:8080/xxx/yyy/zzz的格式(zzz为参数),但是项目其它请求url后面都必须要有.do,想 ...
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
第二个视图控制器如何获取第一个视图控制器的部分信息 例如 :第二个界面中的lable显示第一个界面textField中的文本 这就需要用到属性传值.block传值 那么第一个视图控制器如何获的第二个视 ...
最新文章
- freebasic 编译linux,免费BASIC编译器下载
- 更改c语言程序保存地址吗,C语言文本文件实现局部修改
- PhpExcel 删除默认的Sheet
- RabbitMQ开机启动 Centos7环境
- linux shell if -a 到-z参数含义
- 1.SpringMVC 概述
- guava_学习_00_资源帖
- 某8位微型计算机地址码为18位,计算机组成原理复习题.doc
- Shell获取多行输入并输出每行的第3个字符
- jquery ajax select 二级联动
- Linux中tmux多终端复用和Screen多窗口工具
- Windows Vista SP2 和 Windows Server 2008 SP2 已经发布
- VCForPython27.msi下载
- Python安装pandas模块
- c++语言题库,计算机二级c++题库软件下载
- 东软始业教育2021(注意看得分88分)
- 行列式的定义及简单计算
- ESP8266/ESP32/nodeMcu/wemos D1 MINI开发板用TFT_eSPI库驱动ST7789(240*240)TFT显示屏
- 介绍NPOI 的颜色卡、名称以及索引
- pthread-win32库编译及使用方法注意事项
热门文章
- Centos7禁用THP(Transparent HugePages)
- 个人软件测试工程师前景理解
- 360奇安信和SonarQube漏洞及bug修改
- 怎样申请IMEI号?
- TexturePacker 导出 Egret(白鹭引擎)格式的图集和图片字体
- 六步骤确保企业成功选择CRM
- Qt中的控件随着窗口大小改变而改变和充满窗口
- xshell连接Linux鼠标焦点丢失了,Xshell5连接虚拟机中的Linux的方法以及失败原因解决...
- videojs动态封面_videojs动态更改视频路径
- 菜鸟修炼笔记--QT--【问题】界面切换时焦点各种异常的处理