Я недавно возился с тимилифом и весенней загрузкой, и я пытаюсь создать контроллер REST класса c и использовать очень простое представление в html. Настройка выглядит следующим образом: у меня есть CarController, который инициирует список и добавляет несколько элементов в этот список в конструкторе.
public CarController() {
cars = new ArrayList<>();
cars.add(new Car("BMW", "i8"));
cars.add(new Car("Renault", "Clio"));
cars.add(new Car("Hyundai", "i30"));
}
У меня есть основная конечная точка, которая выглядит так:
@GetMapping("/car")
public String get(Model model) {
model.addAttribute("cars", cars);
model.addAttribute("newCar", new Car());
return "car";
}
Два других метода перенаправляют на эту конечную точку (которая имеет список элементов из списка).
@PostMapping("/add")
public String addCar(@ModelAttribute Car car) {
cars.add(car);
return "redirect:/car";
}
@GetMapping("/delete")
public String deleteCar(Car car) {
Car carToBeDeleted = cars.stream()
.filter(car1 -> car1.getMark().equals(car.getMark()) && car1.getModel().equals(car.getModel()))
.findFirst().get();
cars.remove(carToBeDeleted);
return "redirect:/car";
}
Оба они работают (я могу добавить машину и удалить ее, и оба действия позволяют мне видеть, что состояние списка изменяется динамически). Но у меня есть большая проблема с методом редактирования, я не могу заставить его работать, он обычно выдает мне сообщение: «Нет значения». Вот мой метод и мой раздел thimeleaf:
@PostMapping("/edit")
public String editCar(@ModelAttribute Car carToEdit, @ModelAttribute Car edits) {
Car carToBeEdited = cars.stream()
.filter(car1 -> car1.getMark().equals(carToEdit.getMark()) && car1.getModel().equals(carToEdit.getModel()))
.findFirst().get();
carToBeEdited.setMark(edits.getMark());
carToBeEdited.setModel(edits.getModel());
return "redirect:/car";
}
<form th:action="@{/edit}" th:object="${newCar}" th:method="post">
<p>Mark:<input type="text" th:field="*{mark}"></p>
<p>Model:<input type="text" th:field="*{model}"></p>
<p>New mark:<input type="text" th:field="*{mark}"></p>
<p>New model:<input type="text" th:field="*{model}"></p>
<p><input type="submit" value="edit a car"></p>
</form>
Я точно знаю, что сам поток будет работать, но у меня есть проблемы с привязкой аргументов моего метода к thymeleaf html.