上一节只是把数据模型放在了请求域中,只能在两个页面之间的请求可用,但在多个页面之间请求就得不到数据。@SessionAttributes可以保证多个请求共用一个模型数据。@SessionAttributes注解中有两个属性:一个是value,用于指定哪个对象要放在session域中;type用于指定哪种类型的对象放在session域中,两个参数可以同时配合使用。例如:
–@SessionAttributes(types=User.class) 会将隐含模型中所有类型
为 User.class 的属性添加到会话中。
– @SessionAttributes(value={“user1”, “user2”})
– @SessionAttributes(types={User.class, Dept.class})
– @SessionAttributes(value={“user1”, “user2”},
示例如下:
首先进行web.xml和spring的xml配置,配置方法同SpringMVC之注解RequestMapping用法一节中一样。
一、创建请求
创建index.jsp,用于发送请求,内容为:
<a href="springMVC/testSessionAttributes">Test SessionAttributes</a>
二、创建控制器
控制器用于截获请求,然后处理业务,并把业务数据放到请求域中,在请求域中获取业务数据。
/*value={"person"}表示person对象可以放在session会话中;
types={String.class}表示String类型的对象可以放在session会话中*/
@SessionAttributes(value={"person"}, types={String.class})
@Controller
@RequestMapping("/springMVC")
public class TestSpringMVC {
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Map<String, Object> map){
Person person = new Person("lzj", 20, "male");
map.put("person", person);
map.put("username", "lzj");
return "success";
}
}
如果不加@SessionAttributes注解,只是把数据模型放在了request会话中了,加上之后,把数据模型不只放在了request中,还放在了session会话中了。
三、创建视图
下面创建success.jsp视图,并在视图中分别获取request和session中的数据。
request person:${requestScope.person }
<br><br>
session person:${sessionScope.person }
<br><br>
request username:${requestScope.username }
<br><br>
session username:${sessionScope.username }
<br><br>
点击index.jsp中请求连接,经控制器截获并处理后,把业务数据放在了请求域中和session域中。success.jsp显示的视图上信息为:
request person:Person [username=lzj, age=20, sex=male]
session person:Person [username=lzj, age=20, sex=male]
request username:lzj
session username:lzj