У меня есть пользовательский перехватчик (TransferInterceptor), который проверяет изменение функции в моем приложении. Когда он изменяется, перехватчик возвращает строку после обработки (результат), содержащую глобальное имя результатов действия, к которому я хочу перенаправить. У меня есть результаты, определенные в глобальных результатах моего файла struts.xml, но они не перенаправляются на указанное действие. У меня есть глобальный результат 'Login', который работает хорошо, но она вызывается из JSP с:struts2 глобальный результат не перенаправляется на действие
<s:a action="Login.action">Login</s:a>
struts.xml файл:
<package name="default" extends="struts-default" namespace="/">
<interceptors>
<interceptor name="AuthenticationInterceptor" class="com.purchasing.utils.AuthenticationInterceptor" />
<interceptor name="TransferInterceptor" class="com.purchasing.utils.TransferInterceptor" />
<interceptor-stack name="secureStack">
<interceptor-ref name="TransferInterceptor" />
<interceptor-ref name="AuthenticationInterceptor" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="secureStack" />
<global-results>
<result name="Login">login.jsp</result>
<result name="RESULTA" type="redirect">ACTIONA</result>
<result name="RESULTB" type="redirect">ACTIONB</result>
</global-results>
<action name="Login" class="com.purchasing.actions.Login">
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">welcome.jsp</result>
<result name="error">login.jsp</result>
<result name="input">login.jsp</result>
</action>
<action name="ACTIONA" class="com.purchasing.actions.ACTIONA">
<result name="success">ACTIONA.jsp</result>
<result name="error">ACTIONA.jsp</result>
<result name="input">ACTIONA.jsp</result>
</action>
<action name="ACTIONB" class="com.purchasing.actions.ACTIONB">
<result name="success">ACTIONB.jsp</result>
<result name="error">ACTIONB.jsp</result>
<result name="input">ACTIONB.jsp</result>
</action>
</package>
TransferInterceptor:
public String intercept(ActionInvocation ai) throws Exception
{
String result = ai.invoke();
session = ai.getInvocationContext().getSession();
fl = (FunctionLine) session.get(Constants.FUNCTION_LINE);
function = fl.getFl_function();
last_function = (Integer) session.get(Constants.LAST_FUNCTION);
if (function != last_function) {
session.put(Constants.LAST_FUNCTION, new Integer(function));
switch (function) {
case 61: return "RESULTA";
case 62: return "RESULTB";
}
return "error";
}
else {
return result;
}
}
Любая помощь будет принята с благодарностью!
Если вы хотите перенаправить к действию, используйте тип результата «redirectAction» вместо «redirect», который используется для перенаправления на статические ресурсы. –
Это ответ @LukaszLenart, вы должны его опубликовать :) –
Я изменил тип = «перенаправить» на type = «redirectAction», и у меня все еще есть та же проблема. – joep