"$ {# fields.hasErrors ('*')}" всегда ложно - проблема перенаправления - PullRequest
1 голос
/ 19 февраля 2020

Мой контроллер выглядит следующим образом:

    @PostMapping("/event/{id}")
    public String save(@PathVariable("id") long id, @Valid Form form, BindingResult bindingResult ) {

        if (!bindingResult.hasErrors()) {
          //No errors
          //No return
        }

        return "redirect:/event/{id}";               
    }

Мой @GetMapping:

 @GetMapping("/event/{id}")
    public ModelAndView eventDetail(@PathVariable("id") long id) {

        ModelAndView model = new ModelAndView("event/details");
        Event event = eventoRepository.findById(id).get();
        model.addObject("event", evento);
        model.addObject("guests", event.getGuests());
        model.addObject("guest",new Guest());

        return model;

    }

Я знаю, что "$ {# fields.hasErrors ('*')}" всегда ложно, потому что перенаправление. (верно?)

Как вернуться на этот путь /event/{id} без перенаправления?

1 Ответ

1 голос
/ 19 февраля 2020

Я знаю, что "$ {# fields.hasErrors ('*')}" всегда ложно, потому что перенаправление. (верно?)

Верно. Похоже, вы всегда перенаправляете. Из-за этого вызывается метод, помеченный @GetMapping("/event/{id}"), форма, скорее всего, сбрасывается в состояние fre sh, и больше нет ошибок, делающих выражение всегда false.

Как вернуться к этому пути / событию / {id} без перенаправления?

Просто вернуть имя представления (шаблона), содержащего форму. Скорее всего, это то же самое, что возвращается методом, помеченным @GetMapping("/event/{id}").

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

Редактировать: Вы также должны предоставить дополнительные объекты для модели. Вместо заполнения модели в каждом методе (Get, Post et c.) Вы можете извлечь общие объекты в метод, помеченный @ModelAttribute. Согласно javado c такой метод может принимать параметры, аналогичные методам, помеченным @RequestMapping.

В вашем случае что-то подобное должно работать нормально:

    @ModelAttribute
    void supplyModel(@PathVariable("id") long id, Model model) {
        Event event = eventoRepository.findById(id).get();
        model.addAttribute("event", evento);
        model.addAttribute("guests", event.getGuests());
        model.addAttribute("guest",new Guest());
    }

    @GetMapping("/event/{id}")
    public String eventDetail(@PathVariable("id") long id) {
        return "event/details";

    }

    @PostMapping("/event/{id}")
    public String save(@PathVariable("id") long id, @Valid Form form, BindingResult bindingResult ) {

        if (bindingResult.hasErrors()) {
            // Has errors
            return "event/details";
        }

        // No errors
        return "redirect:/event/" + id;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...