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