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;

invoke() の呼び出しの後ではなく、finally ブロックにアクション メッセージを追加するロジックを追加しようとしましたが、役に立ちませんでした。

ありがとう、アンディ

4

1 に答える 1

2

結果は、返されるまでにレンダリングされていinvokeます。

「Writing Interceptors」ドキュメントで説明されているように、を実装PreResultListenerする必要があります。

于 2012-11-16T20:40:45.257 に答える