如何使用百里香叶以形式传递两个对象?

2022-09-02 01:10:15

我的问题是以下几点:

我有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"; 
} 

假设我有另一个对象栏,其中包含一个“status”变量。如何传递该对象,以便在同一表单中提交输入?

喜欢:

<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在其中的fieldset来做,这不起作用,我试图在表单中放置两个th:object,这也不起作用。

我发现的唯一方法是构建一个包含这两个对象的另一个对象,然后传递它。这很有效,但我不能创建那种对象,这是无稽之谈(即使它有效)。

当然,这里的对象并不像Foo和Bar那么简单,否则我会合并这两个对象。但这不是我能做到的。

甚至有可能传递两个这样的对象以形式使用吗?

谢谢了。


答案 1

我不认为你需要使用两个.只需使用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。


答案 2

我使用一个div标签来包围我的第二个对象的表单输入,并添加了一个th:object.....控制器处理了它并将其添加到数据库中。

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

      code......

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