Вызов RequestMapping "дважды" - PullRequest
0 голосов
/ 08 ноября 2018

Я не мог понять, что поместить в заголовок, но у меня есть следующий код:

@Controller
public class WorkdayAddController {
@Autowired
private WorkdayRepository workdayRepository; 

@Autowired
private VehicleRepository vehicleRepository;

@RequestMapping(value = "addworkday")
public String addWorkday(Model model){
    model.addAttribute("workdayaddform", new WorkdayAddForm());
    model.addAttribute("vehicles", vehicleRepository.findAll());
    return "addworkday";
}   

@RequestMapping(value = "saveworkday", method = RequestMethod.POST)
public String save(@Valid @ModelAttribute("workdayaddform") WorkdayAddForm workdayaddform, BindingResult bindingResult) {
    if (!bindingResult.hasErrors()) { // validation errors
        Date workdayBegin = workdayaddform.getBeginDate();
        Date workdayEnd = workdayaddform.getEndDate();
        if (!UtilityClass.dateIsAfterDate(workdayBegin, workdayEnd)) {
            bindingResult.rejectValue("beginDate", "err.beginDate", "Aloitusaika ei voi olla lopetusajan jälkeen.");
            return "addworkday";    
        }
        Workday workday = new Workday();
        Vehicle vehicle = new Vehicle();
        workdayRepository.save(workday);
    }
    else {
        return "addworkday";
    }
    return "redirect:/workdaylist";     
}    

}

После проверки 'dateIsAfterDate' он должен снова направить один на 'addworkday', что он и делает, но не добавляет модель 'транспортных средств'. Это можно обойти? Я думал, что это как-то просто направит его на вышеуказанный @RequestMapping (value = "addworkday"), но, похоже, это не так.

Обновление:

@RequestMapping(value = "addworkday")
public String addWorkday(Model model, RedirectAttributes redirectAttributes){
    System.out.println(redirectAttributes); // {}
    System.out.println(model);  // output in comment
    model.addAttribute("workdayaddform", new WorkdayAddForm()); //I guess I need to add the old workdayform here?
    model.addAttribute("vehicles", vehicleRepository.findAll());
    return "addworkday";
} 

 @RequestMapping(value = "saveworkday", method = RequestMethod.POST)
    public String save(@Valid @ModelAttribute("workdayaddform") WorkdayAddForm workdayaddform, 
                       BindingResult bindingResult,
                       final RedirectAttributes redirectAttributes) {
        if (!bindingResult.hasErrors()) { // validation errors
            Date workdayBegin = workdayaddform.getBeginDate();
            Date workdayEnd = workdayaddform.getEndDate();

            if (!UtilityClass.dateIsAfterDate(workdayBegin, workdayEnd)) {
                // Add the vehicle you want to send to the other method.
                redirectAttributes.addFlashAttribute("workdayaddform", workdayaddform);
                redirectAttributes.addFlashAttribute("vehicle", vehicleRepository.findAll());
                redirectAttributes.addFlashAttribute("binding", bindingResult);
                return "redirect:/addworkday";    
            }

1 Ответ

0 голосов
/ 08 ноября 2018

Вам необходимо использовать аннотацию @RedirectedAttributes для отправки атрибутов другому методу в контроллере. Кроме того, вам нужно добавить «redirect: /» к возвращенному URL.

 @RequestMapping(value = "saveworkday", method = RequestMethod.POST)
    public String save(@Valid @ModelAttribute("workdayaddform") WorkdayAddForm workdayaddform, 
                       BindingResult bindingResult,
                       final RedirectAttributes redirectAttributes) {
        if (!bindingResult.hasErrors()) { // validation errors
            Date workdayBegin = workdayaddform.getBeginDate();
            Date workdayEnd = workdayaddform.getEndDate();

            if (!UtilityClass.dateIsAfterDate(workdayBegin, workdayEnd)) {
                // Add the vehicle you want to send to the other method.
                redirectAttributes.addFlashAttribute("vehicle", vehicle);
           redirectAttributes.addFlashAttribute("binding", bindingResult);
                return "redirect:/addworkday";    
            }
        // More code.
        else {
           redirectAttributes.addFlashAttribute("vehicle", new Vehicle());
           return "redirect:/addworkday"; 
        }
    }

Я не был уверен, что вы имели в виду, после else или внутри if, поэтому я добавляю их в обоих местах, просто чтобы убедиться.

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