Amb*_*ber 2 java struts2 interceptor interceptorstack struts2-interceptors
我的拦截器(验证)没有在动作之前或之后被调用.任何想法如何让它工作?
注意:每次调用默认拦截器时.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default,json-default">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
<result-type name="json" class="org.apache.struts2.json.JSONResult" />
</result-types>
<interceptors>
<interceptor name="validation" class="ValidatorBaseAction"/>
<interceptor-stack name="default">
<interceptor-ref name="logger"/>
</interceptor-stack>
<interceptor-stack name="validationStack">
<interceptor-ref name="validation"/>
<interceptor-ref name="default"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="default" />
<action
name="viewRequest"
class="ViewAction"
method="execute">
<interceptor-ref name="validationStack" />
<result name="input" type="redirectAction">explore</result>
<result name="success" type="redirect">/showRequest.do?${explorerParameters}</result>
</action>
</package>
</struts>
Run Code Online (Sandbox Code Playgroud)
class动作和拦截器都必须指定FQCN,而不仅仅是名称.然后将其更改为:
<interceptor name="validation" class="com.foo.bar.ValidatorBaseAction"/>
Run Code Online (Sandbox Code Playgroud)
并将你的行动改为
<action name="viewRequest" class="com.foo.bar.ViewAction" method="execute">
Run Code Online (Sandbox Code Playgroud)ValidatorBaseAction如果是Interceptor,请不要打电话给它ValidatorBaseInterceptor.并确保其内部没有任何行动 ;json-default已经延伸struts-default,所以这个
<package ... extends="struts-default,json-default"
Run Code Online (Sandbox Code Playgroud)
相当于此
<package ... extends="json-default"
Run Code Online (Sandbox Code Playgroud)
那更干净;
由于您扩展了json-default,因此无需重新定义JSON结果,然后删除
<result-type name="json" class="org.apache.struts2.json.JSONResult" />
Run Code Online (Sandbox Code Playgroud)
那是没用的.
redirectAction在重定向到Action时始终尝试优先选择结果,并redirect仅在重定向到其他资源或外部URL时使用结果