这是拦截器代码: -
public class LoginInterceptor extends AbstractInterceptor implements
StrutsStatics {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
ActionContext context = invocation.getInvocationContext();
HttpServletRequest request = (HttpServletRequest) context
.get(HTTP_REQUEST);
HttpSession session = request.getSession(false);
String loginId = (String) session
.getAttribute(Constants.SESSION_ATT_USERID);
if (loginId == null) {
return Action.LOGIN;
} else {
return invocation.invoke();
}
}
}
调用任何特定的Action时,都会调用Interceptor。但Action的参数变为null。如果没有拦截器运行代码,那么它的工作正常。我尝试从很多方面解决这个问题,但找不到任何解决方案。
答案 0 :(得分:0)
当你想使用Interceptor时,你需要将它添加到defaultStack或你的customStack,而你最有可能只使用Interceptor进行操作。这意味着任何其他Interceptor都没有为该动作调用运行,甚至不是参数拦截器,它负责在动作中设置参数。
错误:
<action name="foo" class="org.foo.bar.foobarAction">
<interceptor-ref name="myLoginInterceptor"/>
<result>success.jsp</result>
</action>
右:
<action name="foo" class="org.foo.bar.foobarAction">
<interceptor-ref name="myLoginInterceptor"/>
<interceptor-ref name="defaultStack"/>
<result>success.jsp</result>
</action>