如何使用百里香叶传递两个对象以在表单中使用?


问题内容

我的问题如下:

我有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的字段进行设置,这是行不通的,我试图将两个th:object放入形式,这也不起作用。

我发现的唯一方法是构建包含这两个对象的另一个对象,并将其传递。那很好,但是我不能创建这种对象,这是胡说八道(即使它可以工作)。

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

甚至可以像这样传递两个对象以形式使用?

谢谢了


问题答案:

我认为您不需要使用两个th:objects。只需使用th: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。