【问题标题】:How to set object field with thymeleaf如何使用 thymeleaf 设置对象字段
【发布时间】:2020-02-27 02:28:39
【问题描述】:

我的学生班级有列表“对象”。



public class Student {
    private List<Objects> list;
    ...
}

public class Objects {
    private long id;
    private String context;
    ...
}
    @GetMapping("signup")
    public String showSignUpForm(Model model) {
        List<Objects> objectsList = new ArrayList<>();
        objectsList.add(new Objects(1, "Math"));
        objectsList.add(new Objects(2, "Phys"));
        objectsList.add(new Objects(3, "Chem"));
        objectsList.add(new Objects(4, "Geom"));

        model.addAttribute("objects", objectsList);
        model.addAttribute("student", new Student());
        return "add-student";
    }

    @PostMapping("add")
    public String addStudent(Student student, BindingResult result, Model model) {
        if (result.hasErrors()) {
            return "add-student";
        }
        return "redirect:list";
    }

<form action="#" th:action="@{/students/add}" th:object="${student}" method="post">
   <div class="group">
      <div th:each="obj : ${objects}">
         <input id="check" type="checkbox" th:field="*{list}" th:value="${obj}"/>
         <label for="check" th:text="${obj.getContext()}"></label>
      </div>
      <div class="col-md-6">
         <input type="submit" class="btn btn-primary" value="Submit">
      </div>
   </div>
</form>

所以我想将选定的对象添加到 student.list 但我收到此错误:

无法将类型“java.lang.String[]”的属性值转换为属性“list”所需的类型“java.util.List”;嵌套异常是 java.lang.IllegalStateException:无法将类型“java.lang.String”的值转换为属性“list[0]”所需的类型“example.Objects”:找不到匹配的编辑器或转换策略

怎么做才对?

【问题讨论】:

    标签: java spring spring-mvc thymeleaf


    【解决方案1】:

    首先,如果要使用列表,则必须按索引进行。所以如果你想绑定一个列表,你必须像下面这样。

      @GetMapping("signup")
        public String showSignUpForm(Model model) {
            List<Objects> objectsList = new ArrayList<>();
            objectsList.add(new Objects(1, "Math"));
            objectsList.add(new Objects(2, "Phys"));
            objectsList.add(new Objects(3, "Chem"));
            objectsList.add(new Objects(4, "Geom"));
    
            List<Objects> emptyList = new ArrayList<>();
            Student student = new Student();
            student.addList(emptyList);
            model.addAttribute("objects", objectsList);
            model.addAttribute("student", student);
            return "add-student";
        }
    

    <form action="#" th:action="@{/students/add}" th:object="${student}" method="post">
       <div class="group">
          <div th:each="obj,iterator : ${objects}">
             <input id="check" type="text" th:field="*{list[${iterator.index}].id}" th:value="${obj.id}"/>
            <input type="text" th:field="*{list[${iterator.index}].context}" th:value="${obj.context}"/>
          </div>
          <div class="col-md-6">
             <input type="submit" class="btn btn-primary" value="Submit">
          </div>
       </div>
    </form>

    其次,如果您想进行选择和添加,那么您必须使用 javascript。您必须跟踪列表的索引并在正确的索引中分别绑定值(id 和上下文)。您还必须考虑从列表中删除对象以进行取消选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-29
      • 2015-02-20
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多