我已经在struts 2中实现了我的第一个拦截器。我认为它非常基本但是当它在动作之前运行时,动作字段都被设置为null。 不确定我做错了什么 我的拦截器类是
public class LoginInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(LoginInterceptor.class);
@Override
public String intercept(final ActionInvocation invocation) throws Exception {
Map<String, Object> session = ActionContext.getContext().getSession();
User user = SessionUtilities.getUser(session);
if (user != null) {
return invocation.invoke();
}
Object action = invocation.getAction();
if (!(action instanceof LoginAction)) {
return "loginRedirect";
}
return invocation.invoke();
}
}
我的struts.xml文件是
<interceptors>
<interceptor name="login" class="ar.com.cipres.framework.logic.LoginInterceptor"/>
<interceptor-stack name="loginStack">
<interceptor-ref name="login"/>
</interceptor-stack>
</interceptors>
<default-action-ref name="go.home" />
<global-results>
<result name="loginRedirect" type="redirect">go.loginform.action</result>
<result name="exception" type="redirect">exception.jsp</result>
</global-results>
最后我的一个有问题的操作被配置为
<action name="go.asociate.form" method="prepareAsociateData" class="ar.com.cipres.chacabuco.asociate.AsociateAction">
<interceptor-ref name="loginStack"></interceptor-ref>
<result name="success">chaca/socios/asociateupdate.jsp</result>
</action>
到目前为止有任何评论吗?
谢谢
答案 0 :(得分:0)
我想我发现了这个问题 我必须包含声明新的时删除的defaulStack。
所以我需要修改我的struts.xml文件
<interceptors>
<interceptor name="login" class="ar.com.cipres.framework.logic.LoginInterceptor"/>
<interceptor-stack name="loginStack">
<interceptor-ref name="login"/>
<interceptor-ref name="defaultStack"/> <!-- Need to be added to mantain default functionality -->
</interceptor-stack>
</interceptors>
稍后再试