请求转发引起的session问题
今天在做一个小项目时出现了这样一个问题,在用户登录成功后需要跳转到用户操作界面,在跳转之前顺带的将用户要操作的信息从数据库中查出放入了会话中,之后会在跳转到的页面中显示出来,当时想当然的以为这样子应该没问题,可是后来死活显示不出来,搞了半天也没想明白,代码大概如下所示:
服务器处理代码:
@RequestMapping(value = "/findAll")
public String findAll(HttpServletRequest request) {
List<Emp> list = empService.findAll();
for (Emp emp : list) {
System.out.println(emp.toString());
}
request.getSession().setAttribute("emps",list);
return "ems/empList";
}
签到显示代码
<tr class="row1" th:each="emp:${emps}">
<td>
<span th:text="${emp.id}"></span>
</td>
<td>
<span th:text="${emp.name}"></span>
</td>
</tr>
在前端页面通过jquery进行显示,可惜实际运行后一直无法显示。
解决方法:
将代码修改如下:
@RequestMapping(value = "/findAll")
public String findAll(Model model){
List<Emp> list=empService.findAll();
for (Emp emp:list){
System.out.println(emp.toString());
}
model.addAttribute("emps",list);
return "ems/empList";
}
原因:
该程序在查询后数据后进行了请求转发,如果采用request.getSession().setAttribute("emps",list);
的方法将查出的数据放入到会话中,在请求转发后本次请求结束,会话将失效,所以无法显示,改成model.addAttribute("emps",list);
后将可以正常显示。
总结:
对请求转发和重定向以及会话的知识还是了解不深刻,后期需要加强。