1

関連するすべてのリクエストを処理するマルチアクションコントローラーがあります。ajax リクエストを処理するメソッドを作成しましたが、メソッドはレスポンスとして文字列値を返すことが期待されています。この春のアプリケーションは「mvc:annotation-driven」ではありません。

ajax 呼び出しを処理するメソッドを持つコントローラー:

public class UserController extends MultiActionController { 

    private UserDelegate userDelegate;

    public void setUserDelegate(UserDelegate userDelegate) {
        this.userDelegate = userDelegate;
    }

    public String AjaxExample(HttpServletRequest request, HttpServletResponse response, HttpSession session) {
        String ip = request.getParameter("ip"));
        String sysName = userDelegate.getSysName(ip);
        return sysName;
    }

    //Several methods to handle other requests ...
}

jquery を使用して、上記の「AjaxExample」メソッドを正常に呼び出すことができます。jquery 関数を以下に示します。

function callAjax() {
                        var ip = $('#ip').val();
                        $.ajax(
                            {
                                type: "POST",
                                url: "AjaxExample.do",
                                data: "ip=" + ip,
                                success: function(response) {
                                    alert(response);
                                },
                                error: function(e) {
                                    alert('Error: ' + e);
                                }
                            }
                        );
                    }

私が直面している問題は、@ResponseBody アノテーションを使用せずに文字列を返す方法です。

この 1 つのメソッドだけにアノテーションを使用することはできますか? 正直に言うと<mvc:annotation-driven/>、アプリケーション構成ファイルにタグを設定し、「AjaxExample」メソッドに @ResponseBody の注釈を付けることで、実際にそれを試しました。それはうまくいきませんでした.春はまだ文字列を未解決のビューとして認識していました.

私は注釈を使用して春を構成したことがなく、同じことに関する私の理解は限られています。@Controller でコントローラーにアノテーションを付けていないため、また @Request でメソッドにアノテーションを付けていないため、@ResponseBody アノテーションは機能しませんでしたか? しかし、アプリケーション構成ファイルにそれらの Bean 定義があり、コントローラーの残りのメソッドは正常に動作します。

私の無知を我慢して、このメソッドを取得して ajax 呼び出しに文字列を返す方法を教えてください。

4

1 に答える 1

2

戻り値の型を void に変更してから、応答を に直接書き込みますHttpServletResponse

public void AjaxExample(HttpServletRequest リクエスト、HttpServletResponse レスポンス、HttpSession セッション) {
        文字列 ip = request.getParameter("ip"));
        文字列 sysName;
        PrintStream printStream = new PrintStream(out);
        試す {
           out.print(sysName);
        } キャッチ (IOException e) {}
}
于 2013-04-12T03:22:50.280 に答える