リクエストパラメータの自動バインドはデフォルトの動作のように見えますが、多くのドキュメントが見つかりません。これが私の例です:
<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")
。誰かが私のためにこれにいくつかの光を当てることができますか?