你误用了 th:field 属性。
th:field
它的目的是将您的输入与表单支持bean中的属性绑定。因此,您应该为每个对象创建单独的表单,并以下列方式使用它:
<!-- Irrelevant attributes omitted --> <form th:object="${primaryPerson1}"> <input th:field="*{person.surname}"/> </form>
...或创建一个表单支持bean,它将两个对象组合在一起,例如:
public class EpisodeFormBean { private List<EpisodePerson> episodePersons; //getter and setter omitted }
...然后将其添加到您的模型中 episodeForm 方法...
episodeForm
EpisodeFormBean episodeFormBean = new EpisodeFormBean(); episodeFormBean.setEpisodePersons(Arrays.asList(new EpisodePerson(), new EpisodePerson())); model.addAttribute("episodeFormBean", episodeFormBean);
...并在模板中使用它,如下所示:
<!-- Irrelevant attributes omitted --> <form th:object="${episodeFormBean}"> <input th:field="*{episodePersons[0].person.surname}"/> <input th:field="*{episodePersons[1].person.surname}"/> </form>
在第二个解决方案中,生成的名称将是唯一的我认为它更适合您的需求。
你应该看看 教程:Thymeleaf + Spring 因为那里有很好的解释。特别要注意一句话:
的价值观 th:field 属性必须是选择表达式( *{...} ) 鉴于它们将在评估中得到评估,这是有道理的 表单支持bean而不是上下文变量(或模型 Spring MVC术语中的属性)。
*{...}