SessionAttributes
这次来学习一个新的注解SessionAttributes
这个注解可以把数据放到Session中,很简单,看代码:
public class Student {
private String id;
private String name;
private String age;
private Address address;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age
+ ", address=" + address + "]";
}
}
@SessionAttributes(value="student")
@Controller
public class HelloCtrl {
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model){
Student student = new Student();
student.setId("123");
student.setName("jack");
student.setAge("22");
model.addAttribute("student",student);
return "hello";
}
}
代码解析
有没有注意到,SessionAttributes这个注解不是放在方法上,而是放在类上。
请注意,该注解一定只能放在类上。
在testSessionAttributes方法中,我们定义了一个变量Student,存入Model返回给界面,SessionAttributes注解的value属性为student,于是Student student
在存入请求域的同时,也会被存入session域。
前端获取值:
reqeust:${requestScope.student }<br>
session:${sessionScope.student }
结果截图:
结果显示,无论是请求域还是session域中,都能获取到student
注意:SessionAttributes的value值必须和要存入的session的变量名相同。
SessionAttributes的types属性
SessionAttributes除了有value属性,还有types属性,该属性可以说明了存入session的类型。比如:
@SessionAttributes(value="student",types={Integer.class})
以上代码表示将student对象和类型为Integer的变量存入session。
控制层:
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model){
Student student = new Student();
student.setId("123");
student.setName("jack");
student.setAge("22");
model.addAttribute("student",student);
model.addAttribute("count",123);
return "hello";
}
前端获取值:
reqeust:${requestScope.count }<br>
session:${sessionScope.count }
结果截图:
事实证明,Integer类型的123被自动存到了session中。
value 和 types属性都可以存入多个值
@SessionAttributes(value={"student","address"},types={Integer.class,String.class})
使用方法都是一样的,其他具体代码就不再演示了。