【问题标题】:Add Action Message In Struts 2 Interceptor After Action Invocation在动作调用后在 Struts 2 拦截器中添加动作消息
【发布时间】:2012-11-16 17:53:24
【问题描述】:

在 JSON 结果中传递操作消息时遇到了一个独特的问题。

现在,如果我在我的操作中添加一个操作消息(在 JSON 操作中),我将在 JavaScript 中获取它并捕获操作消息并通过 JGrowl 提醒用户。但是,我不希望在每个操作中添加操作消息的逻辑。我有一个底层服务项目,它的请求上下文在请求之间共享,我可以在那里添加警告消息。我想做的是将这些警告消息转换为在我的前端使用的操作消息,但操作永远不必知道它们。这很有用,因为我可以在访问数据库时插入警告,或者如果有繁琐的业务规则等。

正如我之前提到的,直接将它们添加到操作中时它已经可以工作,因此我知道 JSON 结果可以正常工作并正确传递操作消息。我们已经有一个拦截器,每次都会被命中来管理这个请求上下文,所以我想在这个拦截器中的操作消息上附加到被调用的操作。

但是,我发现的问题是我需要先调用 actionInvocation.invoke(),因为会因此生成任何警告消息。之后,我检查消息并尝试将它们作为操作消息应用。这些操作消息永远不会出现在我的 JSON 响应中,所以我想知道是否可以在调用 invoke() 之后将这些消息添加到拦截器的响应中。这是我的拦截方法的大部分内容:

    try {           
        // Invoke the action.
        String result = actionInvocation.invoke();

        //add all warning messages as an action message to be displayed on that front end
        if (CollectionUtils.isNotEmpty(context.getWarningMessages())) {

            ActionSupport action = (ActionSupport) actionInvocation.getAction();

            for (String s : context.getWarningMessages()) {
                action.addActionError(s);
            }
        }

        return result;

我尝试在 finally 块中而不是在调用 invoke() 之后添加逻辑以添加操作消息,但无济于事。

谢谢, 安迪

【问题讨论】:

    标签: error-handling struts2 struts action interceptor


    【解决方案1】:

    invoke 返回时结果已经渲染完毕。

    您需要implement a PreResultListener,如"Writing Interceptors" docs 中所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      相关资源
      最近更新 更多