【问题标题】:Struts 2: excluding method from validation from just the defaultStack interceptorStruts 2:从 defaultStack 拦截器的验证中排除方法
【发布时间】:2011-11-14 00:39:43
【问题描述】:

我希望能够为 Struts 2 中的一项操作禁用表单验证,但让拦截器堆栈的其余部分仍然能够运行。

我有一个拦截器来检查用户是否登录,我总是希望执行它,但是对于某些操作(例如输入信息),我不希望调用操作的validate

我尝试执行以下操作:

<interceptors>

    <interceptor name="bankingAuthenticator"
        class="csc309.a4.banking.BankUserAuthenticator"/>

    <interceptor-stack name="secureBanking">
        <interceptor-ref name="bankingAuthenticator"/>
        <interceptor-ref name="defaultStack"/>
    </interceptor-stack>

</interceptors>

<default-interceptor-ref name="secureBanking"/>

<action name="Deposit!*" method="{1}" class="csc309.a4.banking.Deposit">
    <result name="success">/banking/Deposit.jsp</result>
    <interceptor-ref name="defaultStack">
        <param name="workflow.excludeMethods">choose</param>
    </interceptor-ref>
</action>

但它会跳过bankingAuthenticator 拦截器和验证。

【问题讨论】:

  • 正确;如果您为单个操作指定 interceptor-ref,则必须为该操作指定 all 拦截器!您应该将您的解决方案添加为答案,然后接受它,以便未来的访问者可以从您的工作中受益:)
  • 您在上面编写的代码与您在答案中编写的代码有什么区别...您能告诉我我没有正确理解吗.....
  • @NIVESHSENGAR,区别在于上述代码中的存款操作中的拦截器名称是“defaultStack”,而答案中的那个是“secureBanking”。
  • 你能告诉我这里的选择是什么吗?里面的方法在哪里?我尝试如下。但它仍然不排除&lt;action name="login"&gt; &lt;interceptor-ref name="secureStack"&gt; &lt;param name="workflow.excludeMethods"&gt;*&lt;/param&gt; &lt;/interceptor-ref&gt; &lt;result&gt;login.jsp&lt;/result&gt; &lt;/action&gt;

标签: struts2 interceptor interceptorstack


【解决方案1】:

我想通了——解决方案是这样的:

<action name="Deposit!*" method="{1}" class="csc309.a4.banking.Deposit">
    <result name="success">/banking/Deposit.jsp</result>
    <interceptor-ref name="secureBanking">
        <param name="workflow.excludeMethods">choose</param>
    </interceptor-ref>
</action>

拦截器参数可以通过在参数名称前面加上拦截器名称来限制特定的拦截器。在这种情况下,只有workflow 拦截器会排除choose 方法;其他拦截器仍会为 choose 操作方法触发。

【讨论】:

  • 太棒了;很高兴你知道了。
猜你喜欢
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多