Я не могу связать свои данные редактирования (метод @Put) с моим представлением в thymeleaf html, и я получаю сообщение: «Нет значения» - PullRequest
0 голосов
/ 09 апреля 2020

Я недавно возился с тимилифом и весенней загрузкой, и я пытаюсь создать контроллер 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.

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