繁体   English   中英

如何使用 thymeleaf 传递两个对象以在表单中使用?

[英]How to pass two objects to use in a form using thymeleaf?

我的问题如下:

我必须从一个表单中填写 2 个不同的对象。

使用 1 个 object,我只需在 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"; 
} 

假设我有另一个 object 栏,其中有一个“状态”变量。 我该如何传递 object 以便我可以在同一个表单中提交输入?

喜欢:

<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,这也不起作用。

我发现的唯一方法是构建另一个包含这两个对象的 object,然后传递它。 效果很好,但我无法创建那种 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。

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

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

      code......

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

我认为完成您的结果的最优雅的方法在这里报告: 使用 Thymeleaf/Spring Boot 添加多个具有相同名称字段的对象

如果两个对象没有同名的字段,则其他解决方案有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM