2012-02-10 10 views
1

リクエストパラメタの自動バインドはデフォルトの動作と思われますが、多くのドキュメントが見つかりません。私のマッピングと今Spring 3 @RequestMappingはリクエストパラメータを自動バインドするはずですか?

<form:form modelAttribute="test" action="testsubmit.do" method="POST"> 
    Name: <form:input path="name" /> 
    Nested Name: <form:input path="test.nestedName"/> 
<input type="submit"/> 


public class Test { 
    public String name; 
    public String name2; 
    public TestNested test; 
    ... 

public class TestNested { 
    public String nestedName; 
    ... 

:ここに私の例である

@RequestMapping(value = "/testsubmit") 
public String testSubmit(Test test){ 
    ... 

testオブジェクトはネストされた値を含むフォーム値をバインドしています。これは私には予想される動作のようですが、マップされたメソッドのパラメータとして指定されたオブジェクトに関して、そのアノテーションとその使用法で少し混乱しています。

15.3.2.8 Providing a link to data from the model with @ModelAttributeは言う:

あなたがメソッドのパラメータにそれを配置すると、@ModelAttributeは、特定の、アノテーション付きメソッドのパラメータにモデル属性をマップ(以下processSubmit()メソッドを参照してください)。これは、コントローラがフォームに入力されたデータを保持するオブジェクトへの参照を取得する方法です。

ロード時にオブジェクトtestをフォームにバインドすると、値はname2に設定されます。

@RequestMapping(value = "/test") 
public String test(Model model) {  
    Test test = new Test(); 
    test.setName2("test name2"); 
    model.addAttribute("test", test); 
    return "test"; 
} 

私は@ModelAttribute("test")testパラメータに注釈を付けるとき、これがsubmit方法に通過されません。

@RequestMapping(value = "/testsubmit") 
public String testSubmit(@ModelAttribute("test") Test test) { 
    ... 

name2は、フォームフィールド/要求として指定されていなかったので、これは私に期待されていますparamですが、@ModelAttribute("test")使用のポイントを理解するのには役立ちません。誰も私のためにこれについていくつかの光を当てることができますか?

答えて

1

@ ModelAttributeは、モデル内のオブジェクトに別の名前/キーを指定することができます。それを使用しない場合、Springは自動的にオブジェクトのクラスに基づいて名前を割り当てます。 "テスト"クラスの場合は "テスト"。 @ModelAttributeを使用すると、 "@ModelAttribute(" whatever ")"を指定することで、モデル内のオブジェクトの名前/キーをたとえば「何でも」に変更できます。

関連する問題