我想在Struts2中編寫一個攔截器,它根據某些條件將請求重定向到不同的操作。我的攔截器工作正常,如下所示。Struts2 ActionContext setName方法不起作用
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你的建議是好的,但我的要求是不同的。我想打電話diffeerent行動不只是返回結果。因爲我需要爲每個操作配置結果名稱。 – mahesh