gpt4 book ai didi

java - Struts 中拦截器没有被调用

转载 作者:行者123 更新时间:2023-12-01 20:15:35 26 4
gpt4 key购买 nike

我的拦截器(验证)在操作之前或之后没有被调用。有什么想法如何让它发挥作用吗?

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

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

最佳答案

主要问题:

  • class操作和拦截器都必须指定FQCN,而不仅仅是名称。然后将其更改为:

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

    并将您的操作更改为

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

附带问题:

  • 别叫它ValidatorBaseAction如果是Interceptor ,称之为ValidatorBaseInterceptor 。并确保其中没有任何操作
  • 不要使用拦截器堆栈只有一个拦截器,我很确定它在 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重定向到操作时的结果,并使用 redirect仅当重定向到其他资源或外部 URL 时才会出现结果

关于java - Struts 中拦截器没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30043007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com