【发布时间】:2014-04-04 13:47:18
【问题描述】:
我正在尝试在 Struts2 中编写一个拦截器,它根据某些条件将请求重定向到不同的操作。我的拦截器工作正常,如下所示。
public String intercept(ActionInvocation actionInvocation) throws Exception {
ActionContext actionContext=actionInvocation.getInvocationContext();
String actionName=actionContext.getName();
String actionResult=null;
if(actionName.equals("admin"))
{
System.out.println("admin");
//if(based on some condition)
actionContext.setName("ErrorPageForLinkAccess");
System.out.println(actionContext.getName());
}
actionResult = actionInvocation.invoke();
return actionResult;
}
Struts 配置
<action name="other">
<result>Jsp/other.jsp</result>
</action>
<action name="admin" class="com.example.Admin" method="adminDemo">
<result name="success">Jsp/admin.jsp</result>
</action>
<action name="ErrorPageForLinkAccess">
<result name="success">Jsp/ErrorPageForLinkAccess.jsp</result>
</action>
每当我调用管理操作时,控制台输出
admin
ErrorPageForLinkAccess
但它仍然没有调用ErrorPageForLinkAccess 操作,而是调用admin 操作。
为什么我会遇到这个问题?
【问题讨论】:
-
设置名称不会改变执行的动作。而是从拦截器返回一些不同的结果,并在 struts.xml 中配置此结果。
-
在你不覆盖默认行为之前你试图设置什么无用 Struts 会为你设置动作名称。
-
@Aleksandr 你的建议很好,但我的要求不同。我想调用不同的操作,而不仅仅是返回结果。因为我需要为每个动作配置结果名称。
-
@Roman 你可能是对的,我需要找到一些解决方案
-
您可以为此配置全局结果。
标签: java struts2 servlet-filters interceptor