web-dev-qa-db-ja.com

thymeleafを使用してフォームで使用する2つのオブジェクトを渡す方法は?

私の問題は次のとおりです:

1つのフォームから入力する必要がある2つの異なるオブジェクトがあります。

1つのオブジェクトで、私は単にnewFoo.htmlで行います。

<form th:object="${foo} th:action="@{/foo}" method="post">
    <input type="text" th:field="*{name}"/>
    <button type="submit">Go</button>
</form>

fooControllerで:

@RequestMapping(value = "/foo/new", method = RequestMethod.GET) 
public String newFoo(final Foo foo, Model model) { 
    return "newFoo"; 
} 

@RequestMapping(value = "/foo/new", method = RequestMethod.POST) 
public String saveFoo(final Foo foo, final BindingResult bindingResult, Model model) { 
    fooService.save(foo); 
    return "redirect:/foo/new"; 
} 

「ステータス」変数を​​含む他のオブジェクトバーがあるとします。同じフォーム内で入力を送信できるように、そのオブジェクトを渡すにはどうすればよいですか?

お気に入り:

<form th:object="${foo} && ${bar}" th:action="@{/foo}" method="post">
    <input type="text" th:field="*{name}"/>
    <input type="text" th:field="*{status}"/>
    <button type="submit">Go</button>
</form>

これまでのところ、機能しないth:objectを含むフィールドセットを処理しようとしましたが、フォームに2つのth:objectを配置しようとしましたが、どちらも機能しません。

私が見つけた唯一の方法は、これらの2つのオブジェクトを含む他のオブジェクトを作成して渡すことです。それはうまくいきますが、そのようなオブジェクトを作成することはできません、それはナンセンスです(たとえそれがうまくいくとしても)。

もちろん、オブジェクトはFooやBarほど単純ではありません。そうでなければ、これら2つをマージすることになります。しかし、それは私ができることではありません。

そのような2つのオブジェクトを渡してフォームで使用することもできますか?

すでにありがとう。

18
brnrd

2つ使用する必要はないと思いますth:objectsth:value

<form th:action="@{/foo}" method="post">
      <input type="text" th:value="${foo.name}" name="name"/>
      <input type="text" th:value="${bar.status}" name="status"/>
      <button type="submit">Go</button>
</form>

Springは、コントローラー側で、そのマッピング手法を使用してフィールドを適切なコマンドオブジェクトであるfooまたはbarにマップするのに十分スマートだと思います。

24

2番目のオブジェクトのフォーム入力を囲むためにdivタグを使用し、th:object .....を追加しました。コントローラーがそれを処理し、データベースに追加しました。

<form method=post th:object="${object1}" >
   <div th:object="${object2}" >

      code......

   </div> 
   <input type="submit" />
</form>
1
KevinG