Java – using cookies in struts 2 and struts
                                        
                    •
                    Java                                    
                I have the following (shortened) struts 2 actions:
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;
  }
}
When I do 'cookiemap When 'containskey', I get a null pointer exception - in my opinion, setcookiesmap is not called I've implemented the cookiesaware interface, so I think it should be called - what did I miss here?
thank you
Solution
It seems that struts only supports reading cookies. You have to go to the servlet response to actually set a cookie
Finally, I have chosen to bypass Struts2 cookie support completely and go directly to the servlet request / response object for reading and writing:
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;
  }
}
And in struts XML or web There is no configuration of this method in XML, which is a benefit So I'm satisfied with this solution, even if it draws struts 2. 0 in bad light
                            The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
                        
                                            
                        THE END
                    
                    
                    
                                                        二维码
                        
                        
                                                
                        