【问题标题】:Thymeleaf - Form for each object in listThymeleaf - 列表中每个对象的表单
【发布时间】:2018-05-03 10:08:26
【问题描述】:

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

class Person() {
   int id;
   String name;

   // getter & setter;
}

来自控制器类的片段:

@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 中,我尝试为每个人创建一个表单(而不是为所有人创建一个表单)。到目前为止我的方法:

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

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

毫不奇怪:这行不通。如果我删除输入元素,则不会发生异常。使用输入元素,我收到以下消息(原因:java.lang.IllegalStateException):

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

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

谢谢。

【问题讨论】:

    标签: java binding thymeleaf


    【解决方案1】:

    您的控制器似乎有些错误。

    请看这里https://www.thymeleaf.org/doc/articles/springmvcaccessdata.html

    所以

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

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

    model.addAttribute("attributeename", attributeobject)
    

    那么你应该能够迭代它。

    编辑:我不懂英语...

    【讨论】:

    • 谢谢,但那是完全不同的东西,甚至不是问题(控制器设计有很多选项,模型可以是输入参数,你只能返回视图的名称,你可以返回一个 ModelAndView 对象 [我更喜欢这种方式] ...您可以使用 RequestMapping-Annotation,您可以使用 Get/Post/../../-Mapping [Spring 4.3 引入])。
    猜你喜欢
    • 1970-01-01
    • 2016-02-17
    • 2015-12-12
    • 1970-01-01
    • 2020-10-18
    • 2019-11-01
    • 1970-01-01
    • 2018-01-04
    • 2019-11-16
    相关资源
    最近更新 更多