0

STSダッシュボードからダウンロード可能なSpring MVC Showcaseプロジェクトで勉強しています

私には完全に明確ではない次のような状況があります。

私は次のフォームを持っています:

<form id="readForm"action="<c:url value="/messageconverters/form" />" method="post">
        <input id="readFormSubmit"type="submit"value="Read Form Data"/>             
</form>

id="readForm" を持つフォームの送信アクションに関連して、次の Jquery 関数があります。これは、要求の body フィールドに 2 つの値付けされたテキスト変数を使用する AJAX 呼び出しを単純に実行するものです: **foo=barfruit=apple

$("#readForm").submit(function() {
    var form = $(this); // Contiene il riferimento all'elemento form submittato 

    // Contiene il riferimento all'emento input all'interno del form (il bottone)
    var button = form.children(":first");

    $.ajax({ 
        type: "POST",               // Tipo di Request: POST 
        // URL specificato dall'attributo "action" del form: "/messageconverters/form" 
        url: form.attr("action"),   
        // Dati che vengono passati all'interno del campo body dell'HTTP Request, 2 variabili
        data: "foo=bar&fruit=apple", 

        // Tipo di media type accettabile dalla response
        contentType: "application/x-www-form-urlencoded", 
        dataType: "text", // Tipo di dati passato dalla HTTP Request 

        success: function(text) {       // Caso di successo: 
            MvcUtil.showSuccessResponse(text, button); 
        }, 

        error: function(xhr) {          // Caso di errore:
            MvcUtil.showErrorResponse(xhr.responseText, button); 
        }
    });
    return false;
});

このリクエストを処理するコントローラ クラスのメソッドは次のとおりです。

@RequestMapping(value="/form", method=RequestMethod.POST)
public @ResponseBody String readForm(@ModelAttribute JavaBean bean) {
    return "Read x-www-form-urlencoded: " + bean;
}

このメソッドは、 @ModelAttributeアノテーションが付けられた JavaBean オブジェクトを入力パラメーターとして受け取ります。

私が持っている定義済みのJavaBeanクラスの例の中を見る:

@XmlRootElement
public class JavaBean {

    @NotNull
    private String foo;
    @NotNull
    private String fruit;

    public JavaBean() {
    }

    public JavaBean(String foo, String fruit) {
        this.foo = foo;
        this.fruit = fruit;
    }

    // GETTER e SETTER METHOD
}

したがって、JavaBeans には、フォームを送信したときに生成される HTTP リクエストを渡すフォーム変数と同じ名前を持つ 2 つのプロパティが含まれています。

@ModelAttributeアノテーションのドキュメント ( http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/bind/annotation/ModelAttribute.html ) を読むと、使用できることがわかりました両方ともメソッドに注釈を付け、両方ともメソッド パラメータに注釈を付けます

私のケースは 2 番目のケースで、このケースでは次のように読むことができます:メソッド パラメータまたはメソッドの戻り値を名前付きモデル属性にバインドし、Web ビューに公開する注釈

では、正確にはどういう意味ですか?

このアノテーションでメソッドパラメーターにアノテーションを付けると、HTTP リクエストの本文内で渡された変数名がアノテーション付きオブジェクトの変数と一致する場合、Spring は同じプロパティ内のこの変数の値を自動的にコピーすることを意味すると思います注釈付きオブジェクトの名前

しかし、私はこれについて確信が持てません...

誰かが私がこのことをよく理解するのを手伝ってくれますか?

Tnx アンドレア

4

2 に答える 2

1

私はそうは思わない。@ModelAttribute は HTTP リクエスト パラメータに関するものではありません。メソッド パラメータに次のような注釈を付けた場合:

public String foo(@ModelAttribute ("petKey") Pet pet){
}

コントローラーモデルオブジェクトから来る「ペット」オブジェクトがあります。Spring は、モデルマップ オブジェクトで「petKey」を検索します。

そして、次のようにメソッドに注釈を付けた場合:

@ModelAttribute ("petKey")
public Pet foo(){
   return new Pet;
}

メソッドを実行してメソッドから戻った後、Spring は「new Pet」を値として、「petKey」をモデルオブジェクト (マップ) 内のキーとして配置します。

于 2013-01-13T08:05:21.063 に答える
1

私の答えは遅いかもしれませんが、私は同じことを研究していて、興味深いこのリンクを見つけました。

メソッドレベルで @ModelAttribute() を使用することについて理解できます。これは、 @SessionAttribute アノテーションとうまく連携します。 http://www.intertech.com/Blog/understanding-spring-mvc-model-and-session-attributes/

于 2014-09-21T07:45:03.083 に答える