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: [email protected]
For additional commands, e-mail: [email protected]