1

在 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() 之后无济于事。

谢谢,安迪

4

1 回答 1

2

结果已经由时间invoke返回呈现。

您需要按照“编写拦截器”文档中的讨论实现 aPreResultListener

于 2012-11-16T20:40:45.257 回答