下面是我在 struts.xml 中定义的拦截器和全局结果
<package name="auth_basic" extends="struts-default,tiles-default">
<interceptors>
<interceptor name="nlogin" class="interceptors.LoginInterceptor"/>
<interceptor-stack name="loginStack">
<interceptor-ref name="nlogin"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="loginStack"/>
<global-results>
<result name="login" type="redirectAction">gotostart</result>
<result name="input" type="redirectAction">gotostart</result>
</global-results>
.
.
.
</package>
上面的配置工作正常,但是当我使用结果chain
而不是redirectAction
它时,它会给出 java.lang.StackOverflowError
此外,当我使用tiles
而不是链时,它也会抛出 java.lang.StackOverflowError
我不能在 global-results 中使用 action-chaining 吗?
下面是我的拦截器代码。另外,我想强调结果类型 redirectAction 工作正常,只有瓷砖和链会产生问题。
public String intercept(ActionInvocation ai) throws Exception {
try {
if (ai.getInvocationContext().getSession().get("user") == null) {
System.out.println("Session Expired/Invalid");
Object action = ai.getAction();
if (action instanceof ValidationAware) {
((ValidationAware) action).addActionError("Unauthorized access. Please Login first");
}
return "login";
}
return ai.invoke();
} catch (Exception e) {
e.printStackTrace();
}
return ai.invoke();
}
edited to include more code from struts.xml
<package name="default" extends="struts-default,tiles-default,json-default">
<default-action-ref name="gotostart"/>
<global-results>
<result name="input" type="tiles">tiles-home</result>
</global-results>
<action name="gotostart" class="actions.IndexAction" method="start">
<result name="success" type="tiles">tiles-home</result>
<result name="input" type="tiles">tiles-home</result>
</action>
</package>