当前位置: 首页 > 面试题库 >

在Interceptor.intercept()内部,我如何知道该动作是否已经执行?

公冶同
2023-03-14
问题内容

我正在使用拦截器在基于Struts的应用程序中实现一些功能,而对其生命周期的工作方式却感到困惑。根据Struts的文档(“拦截器”,“写拦截器”和“大图”),它应该像这样工作:

第一拦截器
  下一个拦截器
    LastInterceptor
      行动
      结果
    LastInterceptor
  下一个拦截器
第一拦截器

这是有道理的,但是我在如何区分在操作之前执行的拦截器调用与在结果呈现之后执行的拦截器调用之间进行了尝试(我在PreResultListener这里跳过了s)。
如果启动调试器,则会有两个调用, intercept()并且在通过时找不到任何明显的内容 ActionInvocation 更新
:这部分是我的主要困惑,一旦知道,我就可以在下面回答我的问题)

在“大画面”页会谈有点混乱的一个“前”,而被称为“后”,“条款”,但我不知道用它来做什么:

[…]

这包括在调用操作本身之前调用所有拦截器(before子句)。

[…]

拦截器将再次执行(以相反的顺序,调用after子句)。

[…]

更新 :这两个句子仍然很糟糕)


问题答案:

拦截器没有两个调用:

public class MyInterceptor implements Interceptor {

    public String intercept(ActionInvocation invocation) {
        /*
        This is before Action.execute(),
        and before all interceptors down the stack
        */

        String code = invocation.invoke();

        /*
        This is after Action.execute(),
        the result rendering and all
        interceptors down the stack,
        but before the interceptors
        higher up in the stack.
        */

        return code;
    }

}

(请注意,我在调试器中看到的“两次拦截调用”是我没有注意到的不太明显的重定向的结果。这使我很困惑。)



 类似资料:
  • 基本上,我想写这样的代码: 这是不可能的,因为没有重载 因此,我目前正在使用,但它并不完美。 有没有一种方法可以不重新声明函数就知道函数是否存在? 基本上,我想做一些类似的事情 和主要的:

  • 问题内容: 我想知道是否有办法知道什么时候(在我的情况下为垂直)何时到达其容纳物的底部。 起初,我虽然在滚动条上使用,但是我不知道如何解释的属性。另外,我不确定是否正确理解了代表什么以及是否可以使用该值来获取所需的信息。 编辑 : 问题答案: 您必须将滚动条的范围添加到您的计算中。我在下面的示例中将代码添加到您的代码中。 两种替代实现(部分对Kleopatra做出反应) 或通过模型

  • 问题内容: 我想检查活动是否正在运行或完成。有什么方法可以检查活动状态? 我找到了,但是我不确定。 问题答案: 如果您想执行任何步骤,将变得不可见。 他们是这里的几种选择。 onDestroy() -进行最终清理。 isFinishing() - 调用后立即返回true。 onStop() -当被框架进程终止时。(未销毁) onPause() -当被其他覆盖 onBackPressed() -捕获

  • 问题内容: 我使用的是Font-Awesome,但未加载字体文件时,图标显示为。 因此,我希望这些图标在未加载文件时具有。 我怎么知道这些文件已经加载,我终于可以显示图标了? 编辑: 我不是在说页面何时加载(onload),因为字体可以在整个页面之前加载。 问题答案: 现在在GitHub上: 本质上,该方法通过比较两种不同字体的字符串宽度来工作。我们使用Comic Sans作为测试字体,因为它是

  • Jenkins有600个插件,在实际系统中,我们用来安装大量的插件。 有时,我们想删除一些插件,使系统更干净,或者用另一个成熟的插件(不同的名称)替换。 这需要确保没有人/没有工作使用这些插件,或者我需要通知他们。 在Jenkins系统的配置或某处是否有任何方法可以知道插件是否被任何作业使用? 更新2013基于下面的答案,我维护简单的“plugin:keyword”映射,如 并从中搜索插件关键字,

  • 我想知道在spring Kafka中,当设置为时,commit是如何工作的。 下面是我在ContainerProperties.SetackMode(AbstractMessageListenerContainer.ackMode.Manual)中设置的属性; 代码 我正在按照spring kafka文档执行操作,但这只意味着我的消息被标记为已发送但未消费(这是我的理解)。 > 在这种情况下,我是