Thymeleaf - 列表中每个对象的表单

时间:2018-05-03 10:08:26

标签: java binding thymeleaf

我是Thymeleaf的新手并尝试解决以下问题:

class Person() {
   int id;
   String name;

   // getter & setter;
}

Controller-class的片段:

@GetMapping(value = {"..."})
public ModelAndView getXXX(HttpServletRequest request)
{
   ModelAndView mv = new ModelAndView("xxx");
   ...
   List<Person> persons = ... // Let's say a list of Persons {1: "Peter", 2: Anna}
   mv.addObject("persons", persons);
   ...
   return mv;
}

现在,在模板xxx.html中,我尝试为每个人创建一个表单(对于所有人而言,不是1个表单)。到目前为止我的方法:

<form th:each="p, stat : ${persons}" 
      th:object="${persons[stat.index]}" 
      th:action="..." method="POST" >

    <input th:field="*{name}" type="text">
</form>

毫不奇怪:这不起作用。如果我删除input-element,则不会发生Exception。使用input-element我得到以下消息(引起:java.lang.IllegalStateException):

Neither BindingResult nor plain target object for bean name 'persons[stat' available as request attribute

有没有办法只向模型添加一个对象列表,仍然能够为列表的每个对象创建表单,并将相应的对象绑定到每个表单?

感谢。

1 个答案:

答案 0 :(得分:0)

您的控制器似乎有些不对劲。

请参阅此处https://www.thymeleaf.org/doc/articles/springmvcaccessdata.html

所以

protected function mapApiRoutes()
{
    Route::prefix('api')
         ->middleware(['api', 'cors'])
         ->namespace($this->namespace)
         ->group(base_path('routes/api.php'));
}

您只需将所需的对象(或列表)传递给模型对象

即可
@RequestMapping(value = "message", method = RequestMethod.GET)
    public String messages(Model model) {
        model.addAttribute("messages", messageRepository.findAll());
        return "message/list";
    }

然后你应该能够迭代它。

编辑:我不懂英语......