4

私の英語が悪いことを理解してください。

Spring MVCを使用しており、このソースを置き換えました

@RequestMapping("/ajax/add_server")
public void addServer(HttpServletRequest request, HttpServletResponse response) throws Exception {
    String host = request.getParameter("host");
    String port = request.getParameter("port");
    String state = request.getParameter("state");

    serverService.addServer(host, port, state);
}

@RequestMapping("/ajax/add_server")
public void addServer(
        @RequestParam("host") String host,
        @RequestParam("port") String port,
        @RequestParam("state") String state) throws Exception {

    serverService.addServer(host, port, state);

}

addServer()メソッドはAJAXによって呼び出されます。

req.getParameter()を使用した場合、ajaxの読み込み画像は消えますが、@RequestParamを使用しても画像は消えません。

AjaxXMLRequestオブジェクトはMSGで成功しないと思います。

でも理由はわかりませんが、これは正常ですか?

追加の発見!!

@RequestMapping("/ajax/add_server")
    public void addServer(
            @RequestParam("host") String host,
            @RequestParam("port") String port,
            @RequestParam("state") String state,
            HttpServletResponse response) throws Exception {

        serverService.addServer(host, port, state);
    }

パラメータに応答を追加すると、画像が消えました。どうしてか分かりません。

これは参考のために残しておきます。

void returnタイプのControllerメソッドは、URI-BASEDVIEWを使用します。

たとえば、この次のソースは、ビューとしてajax/add_server.jspを使用します。

@RequestMapping("/ajax/add_server")
    public void addServer(
            @RequestParam("host") String host,
            @RequestParam("port") String port,
            @RequestParam("state") String state) throws Exception {

        serverService.addServer(host, port, state);
    }
4

1 に答える 1

4

のデフォルトで@RequestParamは、値が必要であり、何もない場合は例外がスローされます。一方getParameter、次のメソッドに null を渡すだけです。そのため、3 つのパラメーターすべてを指定していない場合があると、変更しても正しく機能しません。

編集:

あなたが投稿した追加情報について: void メソッドが HttpServletResponse をパラメーターとして受け取るときにルーティングを変更する AnnotationMethodHandlerAdapter 内にいくつかの特別な処理があります。基本的に、応答を受け取ったので、生成する必要がある出力を処理していると想定し、デフォルトのビュー解像度を無効にします。これにより、サーバーは空の応答本文で単純に 200 を応答します。

void メソッドがあり、HttpResponse オブジェクトを読み取っていない場合、デフォルトのビュー解像度に戻っていました。add_server という名前の .jsp ファイルがどこかにあるとは思えないため、これによりエラーが発生した可能性があります。:)メソッドが返され、Springがビューの解決を試みる前に、サービス呼び出しが完了してコミットされるため、リクエストは「機能」します。ただし、ajax呼び出しは、成功ハンドラーではなくエラーハンドラーに行きます。

tl;dr 注釈付きのコントローラー「魔法」は少し魔法的すぎることがあります:)

于 2012-04-26T06:03:03.580 に答える