繁体   English   中英

拦截器未在Struts中被调用

[英]Interceptor not getting called in Struts

在操作之前或之后没有调用我的拦截器( 验证 )。 任何想法如何使它起作用?

注意:每次调用默认拦截器时。

<?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>

主要问题:

  • Actions和Interceptor的class必须指定FQCN ,而不仅是名称。 然后将其更改为:

     <interceptor name="validation" class="com.foo.bar.ValidatorBaseAction"/> 

    并将您的操作更改为

     <action name="viewRequest" class="com.foo.bar.ViewAction" method="execute"> 

附带问题:

  • 如果它是一个Interceptor ,请不要将其称为ValidatorBaseAction ,将其称为ValidatorBaseInterceptor 并确保其中没有任何动作
  • 不要将一个Interceptor堆栈与一个Interceptor一起使用 ,我敢肯定,在99%的情况下,它都是无用的。 如果不确定,只需使用defaultStack,然后将拦截器添加到其中即可。

抛光:

  • json-default已经扩展了struts-default ,所以这

     <package ... extends="struts-default,json-default" 

    相当于这个

     <package ... extends="json-default" 

    更干净;

  • 由于您扩展了json-default,因此无需重新定义JSON结果,然后删除

     <result-type name="json" class="org.apache.struts2.json.JSONResult" /> 

    那没用。

  • 尝试总是喜欢redirectAction重定向到一个action的结果,并使用redirect重定向到其他资源或外部URL只有当结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM