您的位置:首页 > 编程语言 > Java开发

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:方法入参标注该注解后,入参的对象就会放到数据模型中。

@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页面后,显示结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: