SpringMVC(十一):SpringMVC 处理输出模型数据之SessionAttributes
2018-01-06 17:48
507 查看
Spring MVC提供了以下几种途径输出模型数据:
1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据;
2)Map及Model:处理方法入参为org.springframework.ui.Model、org.springframework.ui.ModelMap或java.util.Map时,处理方法返回时,Map中的数据会自动被添加到模型中;
3)@SessionAttributes:将模型中的某个属性暂存到HttpSeession中,以便多个请求之间可以共享这个属性;
4)@ModelAttribute:方法入参标注该注解后,入参的对象就会放到数据模型中。
测试1:
在TestModelData.java中添加方法testSessionAttribute:
Account.java
View Code
修改index.jsp,添加链接HTML:
修改/WEB-INF/views/success.jsp,添加HTML脚本:
此时访问index.jsp,并点击链接后条状到success.jsp也页面显示信息如下:
测试2:
此时默认情况下,并没有把account实体存放到HttpSession中,如何才能实现呢?-------修改TestModelData.java,在TestModelData类上添加注解@SessionAttributes:
此时重新测试,跳转到success.jsp页面时,显示结果如下:
说明已经把account实体对象存放到map的同时,也存放到了HttpSession中。
2)@SessionAttributes除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中。
测试3:
上边是通过指定属性名称的方式将account对象存放到HttpSession中的,实际上我们也可以通过指定对象类型实现把某一类对象存放到HttpSession。
修改TestModelData.java
修改/WEB-INF/views/success.jsp页面:
此时访问链接地址,跳转到success.jsp页面后,显示结果:
1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据;
2)Map及Model:处理方法入参为org.springframework.ui.Model、org.springframework.ui.ModelMap或java.util.Map时,处理方法返回时,Map中的数据会自动被添加到模型中;
3)@SessionAttributes:将模型中的某个属性暂存到HttpSeession中,以便多个请求之间可以共享这个属性;
4)@ModelAttribute:方法入参标注该注解后,入参的对象就会放到数据模型中。
@SessionAttributes
1)若希望在多个请求之间共享某个模型属性数据,则可以在控制器类上标注@SessionAttributes,Spring MVC将在模型中对应的属性暂存到HttpSession中。测试1:
在TestModelData.java中添加方法testSessionAttribute:
@RequestMapping("/testSessionAttribute") public String testSessionAttribute(Map<String, Object> map) { Account account = new Account("user1", "pwd123", "2018-01-07", "127.0.0.1"); map.put("account", account); System.out.println("testSessionAttribute:"+map); return SUCCESS; }
Account.java
package com.dx.springlearn.entities; public class Account { private String username; private String password; private String registerDate; private String registerIP; public Account() { } public Account(String username, String password, String registerDate, String registerIP) { super(); this.username = username; this.password = password; this.registerDate = registerDate; this.registerIP = registerIP; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getRegisterDate() { return registerDate; } public void setRegisterDate(String registerDate) { this.registerDate = registerDate; } public String getRegisterIP() { return registerIP; } public void setRegisterIP(String registerIP) { this.registerIP = registerIP; } @Override public String toString() { return "Account [username=" + username + ", password=" + password + ", registerDate=" + registerDate + ", registerIP=" + registerIP + "]"; } }
View Code
修改index.jsp,添加链接HTML:
<a href="testSessionAttribute">test SessionAttribute</a>
修改/WEB-INF/views/success.jsp,添加HTML脚本:
SUCCESS PAGE<br> testSessionAttribute request:${requestScope.account.username }<br> testSessionAttribute session:${sessionScope.account.username }<br>
此时访问index.jsp,并点击链接后条状到success.jsp也页面显示信息如下:
测试2:
此时默认情况下,并没有把account实体存放到HttpSession中,如何才能实现呢?-------修改TestModelData.java,在TestModelData类上添加注解@SessionAttributes:
@SessionAttributes(value = { "account" }) @Controller public class TestModelData { private final String SUCCESS = "success"; @RequestMapping("/testSessionAttribute") public String testSessionAttribute(Map<String, Object> map) { Account account = new Account("user1", "pwd123", "2018-01-07", "127.0.0.1"); map.put("account", account); System.out.println("testSessionAttribute:" + map); return SUCCESS; } }
此时重新测试,跳转到success.jsp页面时,显示结果如下:
说明已经把account实体对象存放到map的同时,也存放到了HttpSession中。
2)@SessionAttributes除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中。
测试3:
上边是通过指定属性名称的方式将account对象存放到HttpSession中的,实际上我们也可以通过指定对象类型实现把某一类对象存放到HttpSession。
修改TestModelData.java
@SessionAttributes(value = { "my_value_key" }, types = { Account.class, Integer.class }) @Controller public class TestModelData { private final String SUCCESS = "success"; @RequestMapping("/testSessionAttribute") public String testSessionAttribute(Map<String, Object> map) { Account account = new Account("user1", "pwd123", "2018-01-07", "127.0.0.1"); map.put("account", account); map.put("my_value_key", "my_value"); Integer age = 30; map.put("age", age); Float onlineHours = 129.88f; map.put("onlineHours", onlineHours); System.out.println("testSessionAttribute:" + map); return SUCCESS; } }
修改/WEB-INF/views/success.jsp页面:
SUCCESS PAGE<br> testSessionAttribute request account.username:${requestScope.account.username }<br> testSessionAttribute session account.username:${sessionScope.account.username }<br> <br> testSessionAttribute request my_value_key:${requestScope.my_value_key }<br> testSessionAttribute session my_value_key:${sessionScope.my_value_key }<br> <br> testSessionAttribute request age:${requestScope.age }<br> testSessionAttribute session age:${sessionScope.age }<br> <br> testSessionAttribute request age:${requestScope.onlineHours }<br> testSessionAttribute session age:${sessionScope.onlineHours }<br>
此时访问链接地址,跳转到success.jsp页面后,显示结果:
相关文章推荐
- SpringMVC(十二):SpringMVC 处理输出模型数据之@ModelAttribute
- SpringMVC(十):SpringMVC 处理输出模型数据之Map及Model
- SpringMVC处理模型数据及SpringMVC 确定目标方法 POJO 类型入参的过程
- SpringMVC处理模型数据(1)
- SpringMVC学习(7):处理模型数据
- SpringMVC处理模型数据
- SpringMVC之处理数据模型
- SpringMVC 之 处理数据模型
- SpringMVC学习(四)-处理模型数据
- springMVC之处理模型数据
- SpringMVC中如何处理模型数据
- SpringMVC--处理模型数据
- 04-SpringMVC-springmvc输出数据模型
- springmvc之处理模型数据之map
- SpringMVC-05 处理模型数据
- SpringMvc:处理模型数据
- SpringMVC——处理模型数据
- SpringMVC 学习笔记(四) 处理模型数据
- springmvc之处理模型数据之ModeAndView
- SpringMVC ------处理模型数据