我有以下(缩短)struts2动作:
public class MyAction extends BaseAction implements CookiesAware { public String execute() { if (cookiesMap.containsKey("BLAH")) blah=Integer.parseInt(cookiesMap.get("BLAH")); return "success"; } // For handling cookies Map<String,String> cookiesMap; @Override public void setCookiesMap(Map<String,String> cookiesMap) { this.cookiesMap = cookiesMap; } }
当我做’cookieMap.containsKey’时,我得到一个空指针异常 – 在我看来,setCookiesMap没有被调用.我已经实现了CookiesAware接口,所以我会认为它应该被调用 – 我错过了这里的东西?
谢谢
解决方法
看起来struts只支持读取cookie,你必须去servlet响应来实际设置一个cookie.
最后,我已经选择完全绕过struts2 cookie支持,直接转到servlet请求/响应对象进行阅读和写入:
public class MyAction extends ActionSupport implements ServletResponseAware,ServletRequestAware { public int division; public String execute() { // Load from cookie for(Cookie c : servletRequest.getCookies()) { if (c.getName().equals("cookieDivision")) division=Integer.parseInt(c.getValue()); } // Save to cookie Cookie div = new Cookie("cookieDivision",String.format("%d",division)); div.setMaxAge(60*60*24*365); // Make the cookie last a year servletResponse.addCookie(div); return "success"; } // For access to the raw servlet request / response,eg for cookies protected HttpServletResponse servletResponse; @Override public void setServletResponse(HttpServletResponse servletResponse) { this.servletResponse = servletResponse; } protected HttpServletRequest servletRequest; @Override public void setServletRequest(HttpServletRequest servletRequest) { this.servletRequest = servletRequest; } }
并且在struts.xml或web.xml中没有这个方法的配置,这是一个好处.所以我对这个解决方案感到满意,即使它在不好的光线下画了struts2.
原文地址:https://www.jb51.cc/java/122553.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。