Как установить поле объекта с помощью тимелина - PullRequest
0 голосов
/ 31 октября 2019

В классе «Мой ученик» есть список «Объекты».



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 []» в требуемый тип «java.util.List» для свойства «list»;Вложенное исключение: java.lang.IllegalStateException: невозможно преобразовать значение типа 'java.lang.String' в требуемый тип 'example.Objects' для свойства 'list [0]': не найдено подходящих редакторов или стратегии преобразования

Как это сделать правильно?

1 Ответ

0 голосов
/ 01 ноября 2019

Прежде всего, если вы хотите работать со списком, вы должны сделать это по индексу. Поэтому, если вы хотите связать список, вы должны сделать, как показано ниже.

  @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. Вы должны отслеживать индекс списка и привязывать значение отдельно (идентификатор и контекст) в правильном индексе. Вы также должны рассмотреть возможность удаления объекта из списка для отмены выбора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...