以下は、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-result でアクションチェーンを使用できませんか?
以下は私のインターセプターコードです。また、結果タイプの 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>