SpringMVC Model
处理模型数据
ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据。
@ModelAttribute:方法入参标注了该注解后,入参对象会放到数据模型中
Map、Model:入参为org.springframework.ui.Model/ModelMap或java.util.Map时,数据会自动添加到数据模型中
ModelAndView添加数据模型方法
addObject(String attributeName,ObjectattributeValue)
addAllObjects(Map<String,?> modelMap)
@ModelAttribute
可以定义在入参中也可以定义在方法上
Spring mvc在调用目标方法前,会先逐个调用方法级别上的标注了@ModelAttribute的方法,并将方法的返回值添加到模型中
public class UserController {
@ModelAttribute(“user”)
public User getUser(){
User user = new User();
user.setId(100);
return user;
}
@RequestMapping(value= "/handle62")
public String handle62(@ModelAttribute(“user”)Useruser) {
return "user/showUser";
}
}
访问UserController中任何一个请求处理方法前,spring mvc都会先执行getUser()方法,并将返回值以user为键添加到模型中,执行handle62后,模型数据填充覆盖user对象
@SessionAttributes
如果希望多个请求之间共享某个模型数据,可以在控制器类标注@SessionAttributes,spring mvc会将模型中对应的属性暂存到httpSession中
@SessionAttributes(“user”)
public class UserController {
@ModelAttribute(“user”)
publicUser getUser(){
Useruser = new User();
User.setUserId(“1001”);
returnuser;
}
@RequestMapping(“/handle71”)
public String handle71(@ModelAttribute(“user”)User user) {
user.setName(“John”);
return “redirect:/user/handle71.html”;
}
@RequestMapping(value= "/handle72")
public String handle72(ModelMapmodelMap,SessionStatus sessionStatus) {
User user = (User)modelMap.get(“user”);
If(user!=null){
user.setName(“jetty”);
sessionStatus.setComplete();
}
return "user/showUser";
}
}
Spring mvc在调用处理方法前,在请求线程中自动一个隐含的模型对象,调用所有在方法级别标注了@ModelAttribute的方法,并将方法返回值添加到隐含模型中,查看Session中是否存在@SessionAttributes(“xxx”)所指定的xxx属性,如果有,将其添加到隐含模型中,如果隐含模型已经存在xxx属性,该步骤会覆盖隐含模型中已有的属性值。
对应标注了@ModelAttribute(“xxx”)方法的入参按如下流程
如果隐含模型包含了xxx属性,将其赋给该入参,再用请求消息填充该入参对象直接返回,否则如果xxx是会话属性,即处理类定义出标注了@SessionAttributes(“xxx”),则尝试从该会话中获取该属性,并将其值赋给入参,然后再用请求填充该入参对象,如会话中找不到xxx属性,则抛出HttpSessionRequiredException,如果隐含模型不存在xxx属性,且xxx也不是会话属性,则创建入参的对象实例,在用请求填充该入参。
@SessionAttributes 允许指定多个属性。你可以通过字符串数组的方式指定多个属性,如 @SessionAttributes({“attr1”,”attr2”})。此外,@SessionAttributes 还可以通过属性类型指定要 session 化的 ModelMap 属性,如 @SessionAttributes(types = User.class),当然也可以指定多个类,如@SessionAttributes(types = {User.class,Dept.class}),还可以联合使用属性名和属性类型指定:@SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”})。
@SessionAttributes需要清除时,使用SessionStatus.setComplete();来清除。注意,它只清除@SessionAttributes的session,不会清除HttpSession的数据
SpringMVC Model的更多相关文章
- springMVC Model ModelMap 和 ModelAndView的区别(转)
原文地址:springMVC Model ModelMap 和 ModelAndView的区别 近来在看代码,发现controller里有不同的处理返回数据的方式,而自己一直在用ModelAndVie ...
- SpringMVC Model,ModelMap ModelAndView
SpringMVC 调用方法之前会创一个隐含的模型对象(即Model,ModelMap ModelAndView) //@ModelAttribute 先于login方法执行 @ModelAttrib ...
- SpringMVC model 多余字段 忽略
spring-mybaits的model中如何通过注解忽略非数据库字段?——CSDN问答频道https://ask.csdn.net/questions/643534 ObjectMapper忽略多余 ...
- springMVC model传对象数组 jq 获取
这个问题网上没有什么解答,有两种可能性: 一.我使用的这种方法实在太蠢了正常人都不会去这个搞: 二.我太蠢了.... 以下解决方案 //后台代码如下 public String plant(Model ...
- 巩固一下:SpringMVC详细示例实战教程
一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...
- [转]史上最全最强SpringMVC详细示例实战教程
原文:http://www.cnblogs.com/sunniest/p/4555801.html?utm_source=tuicool&utm_medium=referral SpringM ...
- 史上最全最强SpringMVC详细示例实战教程
一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...
- springmvc上传图片并显示图片--支持多图片上传
实现上传图片功能在Springmvc中很好实现.现在我将会展现完整例子. 开始需要在pom.xml加入几个jar,分别是: <dependency> <groupId>comm ...
- SpringMVC基础入门
一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 ...
随机推荐
- JS IOS/iPhone的Safari不兼容Javascript中的Date()问题
var date = new Date('2016-11-11 11:11:11'); document.write(date); 最近在写一个时间判断脚本,需要将固定好的字符串时间转换为时间戳进行比 ...
- javascript高级程序设计第四章 变量、作用域和内存问题
变量包含两种,,基本类型和引用类型 基本类型是指一些简单的字段: 引用类型是☞由多个值构成的对象 引用类型的值是保存在内存中的对象,在javascript中是不允许直接访问内存中的位置; 函数的参数 ...
- 利用wangEditor获取文章格式和内容
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...
- Swift高级语法学习总结(转)
Swift高级语法学习总结 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如果有参数和返回值直接写在两个括号里就可以了 1.2 参 ...
- 系统hosts文件的作用
host是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会 ...
- sql 连接查询的区别 inner,left,right,full
--table1 表 ID NAME QQ PHONE1 秦云 10102800 135000002 在路上 10378 136000003 LEO 10000 139000004 秦云 024145 ...
- 关于leetcode中链表中两数据相加的程序说明
* Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ ...
- Install Nvidia driver 367.18 or later
Install Nvidia driver 367.18 or later from ppa:graphics-drivers/ppa as follows: sudo add-apt-reposit ...
- mySQL数据库Sql语句执行效率检查--Explain命令
mysql性能的检查和调优方法 Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的 ...
- iOS - PackIpa App 打包
前言 打包 ipa 的前提 证书的申请和设置和 "App 上架" 文章的一样 从第一步到第四步都是一样的.还有第六步的 1-3 都是一样的,从第四步开始变化. 1.Archive ...