1

リクエストパラメータの自動バインドはデフォルトの動作のように見えますが、多くのドキュメントが見つかりません。これが私の例です:

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

15.3.2.8モデルからのデータへのリンクを次のように提供し@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";
}

パラメータに: でsubmit注釈を付けると、これはメソッドに渡されません。test@ModelAttribute("test")

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

フォームフィールド/リクエストパラメータとして指定されていないため、これは私には予想されますname2が、使用法のポイントを理解するのに役立ちません@ModelAttribute("test")。誰かが私のためにこれにいくつかの光を当てることができますか?

4

1 に答える 1

1

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

于 2012-03-24T16:39:14.043 に答える