struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From li wei <li.wei.linf...@gmail.com>
Subject Re: S2 Action Setter Not Called
Date Fri, 04 Feb 2011 09:27:53 GMT
the problem is that you pushed a HashMap on the ValueStack's root.

if you do that, all the values will be populated to the HashMap, not 
your action class

you can try this code to fix it.

  ActionContext.getContext().put("browser", userSession.getBrowser());



(2011/02/04 17:12), Rubens Gomes wrote:
> Okay.  I found what is causing the setters not to be called.   I have an interceptor
called ValueStackInterceptor (which is called prior to ParametersInterceptors) that is placing
a String variable "browser" on the stack (please, see code below). If I comment out the line
that places this variable on the stack (see below) everything works fine.  I am showing the
Interceptor and the line of code that is causing a problem.
>
> Can someone please help me understand what is the problem with this code?
>
>
> -----------------------------------------
>
> package com.softlagos.web.struts2.interceptor;
>
> import java.util.HashMap;
> import java.util.Map;
>
> import javax.servlet.http.HttpServletRequest;
>
> import org.apache.commons.lang.xwork.StringUtils;
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
> import org.apache.struts2.ServletActionContext;
>
> import com.opensymphony.xwork2.ActionContext;
> import com.opensymphony.xwork2.ActionInvocation;
> import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
> import com.softlagos.web.common.UserSession;
> import com.softlagos.web.common.WebAppUtils;
>
>
> /**
>   * Interceptor object used to initialize the Struts 2 Value Stack with some state information
(like the
>   * browser variable) that is needed in the results.
>   *
>   * @author  Rubens Gomes
>   * @version $Id: ValueStackInterceptor.java 3754 2011-02-03 00:39:46Z rgomes $
>   */
> public final class ValueStackInterceptor extends AbstractInterceptor
> {
>      private static final long serialVersionUID = 1;
>      private static final Log logger = LogFactory.getLog(ValueStackInterceptor.class.getName());
>
>      public ValueStackInterceptor()
>      {
>          super();
>      }
>
>      @Override
>      public String intercept(final ActionInvocation invocation)
>          throws Exception
>      {
>          HttpServletRequest request = ServletActionContext.getRequest();
>          UserSession userSession = WebAppUtils.getUserSession(request);
>
>          /*
>           * The DetectUserAgentFilter code should be run prior to Struts 2 filter because
that filter
>           * is responsible for setting the browser on the HTTP userSession session object.
>           */
>          if(userSession==null)
>              throw new IllegalStateException("The userSession was not set.");
>
>          if(StringUtils.isBlank(userSession.getBrowser()))
>          {
>              String msg = "The userSession browser is null, which means that the user
agent detection failed.  Code cannot proceed at this point.";
>              IllegalStateException ex = new IllegalStateException(msg);
>              logger.error(msg, ex);
>              throw ex;
>          }
>          if(logger.isInfoEnabled())
>              logger.info("Setting Struts2 value stack browser [" + userSession.getBrowser()
+ "].");
>
>          Map<String, Object>  context = new HashMap<String, Object>();
>          // browser is used on Result objects to render either a desktop or mobile JSP
page.
>
>          context.put("browser", userSession.getBrowser());
>
> /*  ---->>>   THE FOLLOWING LINE IS IMPACTING ON ACTION SETTER NOT TO BE CALLED<<<
 ---- */
>          ActionContext.getContext().getValueStack().push(context);
>
>
>          /* --- Reverse Path --- */
>          return invocation.invoke();
>      }
> }
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message