我是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
有没有办法只向模型添加一个对象列表,仍然能够为列表的每个对象创建表单,并将相应的对象绑定到每个表单?
感谢。
答案 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";
}
然后你应该能够迭代它。
编辑:我不懂英语......