У меня есть два перехватчика, определенные в отдельных пакетах.Перехватчик не вызывается, но выполняет в любом случае?
Одним из них является «позитивным» (проверяет session
currentId
содержит) и другие «не-утвердительные» (чеки, если session
не содержит currentId
).
struts.xml
:
<!-- actions available to guests -->
<package name="guest" extends="struts-default">
<interceptors>
<interceptor name="containskey" class="com.mypackage.interceptor.ContainsKeyInterceptor" />
</interceptors>
<action name="index" class="com.mypackage.action.IndexAction">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="containskey" />
<result type="redirect">/index.jsp</result>
<result name="index" type="redirect">/index.jsp</result>
</action>
<action name="login" class="com.mypackage.action.LoginAction">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="containskey" />
<result type="redirect">/index.jsp</result>
<result name="input">/login.jsp</result>
<result name="index" type="redirect">/index.jsp</result>
</action>
</package>
<!-- actions available to members -->
<package name="member" extends="struts-default">
<interceptors>
<interceptor name="notcontainskey" class="com.mypackage.interceptor.NotContainsKeyInterceptor" />
</interceptors>
<action name="changepassword" class="com.mypackage.action.ChangePasswordAction">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="notcontainskey" />
<result type="redirect">/usercp.jsp</result>
<result name="input">/usercp-change-password.jsp</result>
<result name="index" type="redirect">/index.jsp</result>
</action>
<action name="logout" class="com.mypackage.action.LogoutAction">
<result type="redirectAction">
<param name="actionName">index</param>
</result>
</action>
</package>
NotContainsKeyInterceptor
:
public class NotContainsKeyInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
System.out.println("NotContainsKeyInterceptor");
final ActionContext actionContext = actionInvocation.getInvocationContext();
Map<String, Object> session = actionContext.getSession();
if(!session.containsKey("currentId")) {
return "index";
}
String result = actionInvocation.invoke();
return result;
}
}
http://localhost:8080/mysite/changepassword
- Когда я называю
changepassword
действия без вход в систему (т.session
не содержитcurrentId
), тоprintln()
изNotContainsKeyInterceptor
не выполняется (что заставляет меня предположить это не называется), тем не менее, это не ожидаемое поведение Перенаправление наindex.jsp
. validate()
способChangePasswordAction
класс также вызываемый.
Почему это так?
(Пожалуйста, скажите мне, если вам нужно, чтобы увидеть ChangePasswordAction
класс, я добавлю его к столбу.)
На самом деле его не называется .. Можете ли вы изменить конфигурацию таким образом, и попробовать '<перехватчик-исх имя =«notcontainskey»/><имя перехватчик-исх =» defaultStack "/> 'Я имею в виду указать ваш перехватчик сначала позже' defaultstack' – Babel
Interchanging работал. Если бы вы могли выразить это как официальный ответ, я воспользуюсь им. Благодарю. :) – silver
Перехватчик вызывается в порядке, указанном элементами конфигурации. –