记SpringMVC model & session一个使用问题

现象:之前使用@SessionAttributes注解以及在handler中使用modelMap添加缓存,业务中有替换缓存属性的需要,结果通过HttpSession修改后前端获取还是修改前的值
贴一篇详解:
http://www.importnew.com/16782.html
Spring model在每次请求方法处理完后会将model中的值复制到request中,以及根据sessionAttributes中添加的参数将同名参数复制到httpSession中,所以在方法中修改的操作又被覆盖。
@Controller
@RequestMapping("/dpip")
@SessionAttributes({"userid"})
public class DpipController {
protected Logger logger = LoggerFactory.getLogger(DpipController.class);
@RequestMapping("/testModel.do")
public String test(HttpServletRequest request, ModelMap model){
Enumeration<String> requEnumeration = request.getAttributeNames();
while (requEnumeration.hasMoreElements()) {
String s = (String) requEnumeration.nextElement();
System.out.println(s);
System.out.println("="+ request.getAttribute(s));
}
System.out.println("session===========");
Enumeration<String> sessionE = request.getSession().getAttributeNames();
while (sessionE.hasMoreElements()) {
String e = (String) sessionE.nextElement();
System.out.println(e);
System.out.println("="+request.getSession().getAttribute(e));

}
Object userid = "xushulin";
model.put("userid", userid);


return "/WechatTemplate/nextModel";

}
@RequestMapping("/changeModel.do")
public String changeSession(HttpServletRequest request){
Object userid = request.getSession().getAttribute("userid");
System.out.println("userid:========"+userid);
request.getSession().setAttribute("userid", "liliang");
Object nextUserid = request.getSession().getAttribute("userid");
System.out.println("nextUserid:"+nextUserid);
return "/WechatTemplate/changedModel";
}

@RequestMapping("/lastModel.do")
public String lastSession(HttpServletRequest request){
Object userid = request.getSession().getAttribute("userid");
System.out.println("userid:========"+userid);
return "/WechatTemplate/lastModel";
}
}


jsp页面(model.jsp/nextModel.jsp/changeModel.jsp/)
<div>
<%  
    java.util.Enumeration<String> reqEnum = request.getAttributeNames();  
    while (reqEnum.hasMoreElements()) {  
        String s = reqEnum.nextElement();  
        out.print(s);  
        out.println("==" + request.getAttribute(s));  
%><br />  
<%  
    }  
%>
model页面


<div>
<%  
    java.util.Enumeration<String> reqEnum = request.getSession().getAttributeNames();  
    while (reqEnum.hasMoreElements()) {  
        String s = reqEnum.nextElement();  
        out.print(s);  
        out.println("==" + request.getAttribute(s));  
%><br />  
<%  
    }  
%>
model页面
<a href="<%=request.getContextPath()%>/dpip/testModel.do">next</a>
</body>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值