My application likes to pass value from AbstractInterceptor to two
ActionSupport classes (codes below).
When the user presses the Back button of a browser, hasValue() return true
for class Action1.
When the user presses the Back button of a browser, hasValue() return null
for class Action2.
My log show that request.setAttribute(KEY, Boolean.TRUE); //line A are
executed for class Action1 and Action2.
Where is the bug?
Is it related to type="tiles" and type="redirectAction" in struts.xml?
Please help.
Thanks.



import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.StrutsStatics;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;


public class MyInterceptor extends AbstractInterceptor {
    public static final String KEY = "KEY";

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        HttpServletRequest httpServletRequest = (HttpServletRequest)
ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);

        final ActionContext context = invocation.getInvocationContext();
session = context.getSession();
HttpServletRequest request = (HttpServletRequest)
context.get(StrutsStatics.HTTP_REQUEST);
HttpSession httpSession = request.getSession(true);

        synchronized (httpSession) {
            httpServletRequest.setAttribute(KEY, Boolean.TRUE); //line A
        }
    }
}


import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.RequestAware;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.interceptor.ScopedModelDriven;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Preparable;

public class CoreAction extends ActionSupport implements Preparable,
SessionAware, ApplicationAware, RequestAware {

    public boolean hasValue()  {
        HttpServletRequest httpServletRequest = (HttpServletRequest)
ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
        return
Boolean.TRUE.equals(httpServletRequest.getAttribute(MyInterceptor.KEY);
    }
}

public class Action1 extends CoreAction implements
ScopedModelDriven<Model1> {
    //...
}

public class Action2 extends CoreAction implements
ScopedModelDriven<Model2> {
    //...
}



Struts version is 2.5.26.

<http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
Virus-free.
www.avg.com
<http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>

Reply via email to