How can I do that when I chain actions?. I mean, the second action is chained after the first one, but there are situations in which there is no chaining at all(both actions can be executed indepently) or the chaining can be the other way. In all cases I need to keep only the last cookie generated. I can keep a set of cookies in the request, but how I can put them into the request after all the processing has been done? Since if I chain the actions, there is no way to know programatically which is the last one, right? Or is there?
Thanks Jose Sent via BlackBerry from T-Mobile -----Original Message----- From: Dave Newton <davelnew...@gmail.com> Date: Fri, 24 Dec 2010 12:57:53 To: Struts Users Mailing List<user@struts.apache.org>; <jlm...@gmail.com> Subject: Re: How to avoid PreResultListener called twice in action chaining Save cookies outside the request then, and only add the cookie at the last minute. Dave On Dec 24, 2010 8:49 AM, <jlm...@gmail.com> wrote: > Can't be done. The HttpServletResponse does not provide a method to check if there is already a cookie on the request. And I need to put the cookie generated by the last action, not the first one. > Sent via BlackBerry from T-Mobile > > -----Original Message----- > From: Dave Newton <davelnew...@gmail.com> > Date: Fri, 24 Dec 2010 07:47:59 > To: Struts Users Mailing List<user@struts.apache.org> > Reply-To: "Struts Users Mailing List" <user@struts.apache.org> > Subject: Re: How to avoid PreResultListener called twice in action chaining > > Check to see if it's already there? > > On Fri, Dec 24, 2010 at 7:04 AM, JOSE L MARTINEZ-AVIAL <jlm...@gmail.com >wrote: > >> Hello all, >> I've developed an interceptor to add cookies to the response. It works as >> follows: >> [..] >> public String intercept(ActionInvocation invocation) throws Exception { >> invocation.addPreResultListener(this); >> return invocation.invoke(); >> } >> >> public void beforeResult(ActionInvocation invocation, String resultCode) { >> //log.debug("beforeResult start"); >> ActionContext ac = invocation.getInvocationContext(); >> HttpServletResponse response = (HttpServletResponse) >> ac.get(StrutsStatics.HTTP_RESPONSE); >> addCookiesToResponse(invocation.getAction(), response); >> //log.debug("beforeResult end"); >> } >> private void addCookiesToResponse(Object action, HttpServletResponse >> response) { >> //log.info("CookieProviderInterceptor "+action); >> if (action instanceof CookieProvider) { >> >> >> Map<String,CookieBean> cookies = ((CookieProvider) >> action).getCookies(); >> //log.info("CookieProviderInterceptor "+cookies); >> >> if (cookies != null) { >> Set<Entry<String,CookieBean>> cookieSet = >> cookies.entrySet(); >> for (Entry<String, CookieBean> entry : cookieSet) { >> CookieBean cookiebean = entry.getValue(); >> Cookie cookie = new Cookie(cookiebean.getCookieName(), >> cookiebean.getCookieValue()); >> cookie.setMaxAge(cookiebean.getMaxAge()); >> cookie.setComment(cookiebean.getComment()); >> if (cookiebean.getDomain()!=null) >> cookie.setDomain(cookiebean.getDomain()); >> cookie.setPath(cookiebean.getPath()); >> cookie.setSecure(cookiebean.getSecure()); >> cookie.setVersion(cookiebean.getVersion()); >> //log.info("adding "+cookie); >> response.addCookie(cookie); >> } >> } >> } >> } >> >> So the idea is that the Action implements CookieProvider, returning a map >> of >> cookies, and put the cookies in the response. It works well, but I'm having >> some problems when I chain two actions, if both of them are CookieProvider, >> and both return a cookie with the same name. My idea was be that the first >> cookie would be overwritten by the second one, but in fact the response has >> both cookies, with the same name. After giving it a thought, it makes >> sense, >> so probably I'm doing something wrong. Any insight on how to do this? >> >> TIA >> >> Jose Luis >> >