SpringMVC 域对象共享数据的实现示例
作者:gonghr 发布时间:2021-07-18 15:45:57
标签:SpringMVC,域对象,共享数据
使用ModelAndView向request域对象共享数据
index.html
<a th:href="@{/testModelAndView}" rel="external nofollow" >使用ModelAndView</a>
控制器
/**
* ModelAndView有Model和View的功能
* Model主要用于向请求域共享数据
* View主要用于设置视图,实现页面跳转
*/
@RequestMapping("/testModelAndView")
public ModelAndView success(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("username","gonghr"); //向请求域共享数据
modelAndView.setViewName("success"); //设置视图名称,实现页面跳转
return modelAndView; //返回
}
success.html
sucess
<p th:text="${username}"></p>
使用Model向request域对象共享数据
index.html
<a th:href="@{/testModel}" rel="external nofollow" >使用Model</a> <br>
控制器
@RequestMapping("/testModel")
public String testModel(Model model){
model.addAttribute("company","JLU");
return "success";
}
success.html
sucess
<p th:text="${company}"></p> <br>
使用map向request域对象共享数据
index.html
<a th:href="@{/testMap}" rel="external nofollow" >使用Map</a> <br>
控制器
@RequestMapping("/testMap")
public String testMap(Map<String, Object> map){
map.put("age","Nineteen");
return "success";
}
sucess.html
sucess
<p th:text="${age}"></p> <br>
使用ModelMap向request域对象共享数据
index.html
<a th:href="@{/testModelMap}" rel="external nofollow" >使用ModelMap</a> <br>
控制器
@RequestMapping("/testModelMap")
public String testModelMap(ModelMap modelMap){
modelMap.addAttribute("major","software engineering");
return "success";
}
success.html
<p th:text="${major}"></p> <br>
Model、ModelMap、Map的关系
经过测试发现:除了ModelAndView
的实现类是ModelAndView
,Model
、Map
和ModelMap
的实现类都是BindingAwareModelMap
。
Model
、ModelMap
、Map
类型的参数其实本质上都是 BindingAwareModelMap
类型的
class of ModelAndView: class org.springframework.web.servlet.ModelAndView
class of Model: class org.springframework.validation.support.BindingAwareModelMap
class of Map: class org.springframework.validation.support.BindingAwareModelMap
class of ModelMap: class org.springframework.validation.support.BindingAwareModelMap
阅读ModeAndView
的源码可以发现,ModeAndView
和ModelMap
是组合关系。下面是ModeAndView
的部分源码。
public class ModelAndView {
@Nullable
private ModelMap model;
public ModelAndView() {
}
public ModelMap getModelMap() {
if (this.model == null) {
this.model = new ModelMap();
}
return this.model;
}
public ModelAndView addObject(String attributeName, @Nullable Object attributeValue) {
this.getModelMap().addAttribute(attributeName, attributeValue);
return this;
}
当ModeAndView
调用addObject()
方法时其实是调用ModelMap
的addAttribute()
方法,本质上与ModelMap
是一样的。
各个类之间的关系如下:
public interface Model{}
public class ModelMap extends LinkedHashMap<String, Object> {}
public class ExtendedModelMap extends ModelMap implements Model {}
public class BindingAwareModelMap extends ExtendedModelMap {}
四种方式本质上都是调用的Model
接口中的addAttribute
方法
向session域共享数据
index.html
<a th:href="@{/testSession}" rel="external nofollow" >使用Session</a> <br>
控制器
@RequestMapping("/testSession")
public String testSession(HttpSession session){
session.setAttribute("message","session scope");
return "success";
}
success.html
<p th:text="${session.message}"></p> <br>
向application域共享数据
index.html
<a th:href="@{/testApplication}" rel="external nofollow" >使用Application</a> <br>
控制器
@RequestMapping("/testApplication")
public String testApplication(HttpSession session){
ServletContext application = session.getServletContext();
application.setAttribute("testApplication","hello,application");
return "success";
}
success.html
<p th:text="${application.testApplication}"></p> <br>
来源:https://www.cnblogs.com/gonghr/p/15202176.html


猜你喜欢
- JavaScript 中需要创建函数的话,有两种方法:函数声明、函数表达式,各自写法如下:// 方法一:函数声明function foo()
- 相对布局要比前面讲的线性布局和表格布局要灵活一些,所以平常用得也是比较多的。相对布局控件的位置是与其周围控件的位置相关的,从名字可以看出来,
- 目录一、服务的概念二、Android的多线程编程2.1 线程的基本用法2.2 在子线程中更新UI更新方式一更新方式二2.3 解析异步消息处理
- 这个工具叫“InstallShield”,可以自己去网上下一个,有绿色版本 也有安装版的。 &
- thinking in java3中的多态People are often confused by other, non-object-or
- 本文实例为大家分享了java开发利用jacob将word转pdf的具体代码,供大家参考,具体内容如下jacob 缺点:需要 window 环
- 使用lzma SDK对7z文件简单解压缩有时候我们只需要单纯对lzma算法压缩的7z文件进行解压,有时需要在嵌入式设备上解压,使用p7zip
- 代码如下:using System; using System.Collections.Generic; using S
- Java的常量池通常分为两种:静态常量池和运行时常量池静态常量池:class文件中的常量池,class文件中的常量池包括了字符串(数字)字面
- SpringBoot集成Mybatis时mybatis.mapper-locations和@MapperScan的作用1、mybatis.m
- 这篇文档主要关注下配置修改后对应的 Java 对象是如何更新,并不关注整体的配置改动流程所有代码都来自 apollo-client 项目更新
- 本文实例为大家分享了Java实现简单猜拳游戏的具体代码,供大家参考,具体内容如下看网上的猜拳游戏那么多,但都是用switch输入数字,所以用
- 1、pom.xml配置修改<packaging>jar</packaging>//修改为<packaging&
- 无论使用何种IDE开发Android,集成官方Android SDK并创建Android工程之后,该工程都会默认包括一整套Android项目
- 一、简介前面介绍了平时用到的大多数的多线程的例子,但在实际开发中使用的线程往往是大量的和更为复杂的,这时,每次都创建线程、启动线程。从性能上
- 之前写了一个WPF的圆形环绕的Loading动画,现在写一个Winform的圆形环绕的Loading动画。1.新建Winform项目,添加一
- 简述偶然看到一篇关于阿里新orm框架的文章,好奇的点了进去。开发后端多年,看到这个还是有点兴奋的。常用mysql的orm框架mybatis、
- 前言:由于最近有解析协议的一些业务场景,需要用到一些字节操作工具,这里封装了一些比较常用的转换方法,测试后基本没有问题,可能一些比较偏门的数
- 活锁与死锁活锁活锁同样会发生在多个相互协作的线程间,当他们为了彼此间的响应而相互礼让,使得没有一个线程能够继续前进,那么就发生了活锁。同死锁
- 介绍最近项目开发中用到了WebView播放视频的功能,总结了开发中犯过的错误,这些错误在开发是及容易遇到的,所以我这里总结了一下,希望大家看