@SessionAttributes
注解只用作用在 类 上,作用是将指定的 Model 的键值对保存在 session 中。可以让其他请求共用 session 中的键值对。
指定保存的属性名
作用是将 Model 中指定 属性名 的键值对保存在 session 中。
下面的代码中,/user-information
请求将 Model 中的 user 对象添加到了 session 中。所以在 /testSession
请求中,虽然没有在 Model 中设置键值对,但是在页面中仍然可以取得 user 对象。因为 user 对象被添加到了 session 中,其他请求仍然可以取得。
使用 @SessionAttributes(value = {"user1", "user2", "user3"})
可以指定多个添加到 session 中的 Model 属性名。
package com.pudding.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import com.pudding.bean.User;
@Controller
@SessionAttributes("user")
public class SessionAttributesController {
@RequestMapping("/user-information")
public void setSessionModel(Model model) {
User user = new User("小明", 18);
model.addAttribute("user", user);
}
@RequestMapping("/testSession")
public String get() {
return "test";
}
}
指定保存的属性类型
作用是将 Model 中指定 类型 的键值对保存在 session 中。
同样的,可以使用 @SessionAttributes(types = {User.class, Person.class})
来指定多个类型。
package com.pudding.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import com.pudding.bean.User;
@Controller
@SessionAttributes("user")
public class SessionAttributesController {
@RequestMapping("/user-information")
public void setSessionModel(Model model) {
User user = new User("小明", 18);
model.addAttribute("user", user);
}
@RequestMapping("/testSession")
public String get() {
return "test";
}
}
混合使用
当然,你也可以混合使用上面的两种方式:@SessionAttributes(value = {"user1", "user2"}, types={Persion.class})
会将 model 中属性名为 user1 和 user2 以及类型为 Person 的属性添加到 session 中。