Не удается передать параметр при перенаправлении - PullRequest
0 голосов
/ 26 января 2020

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

фрагмент:

@Controller
public class UsersController {
  @GetMapping("/users")
    public String getAllUsers(Model model, RedirectAttributes redirectAttributes) {
        logger.info("getAllUsers: model = " + model + ", redirectAttributes= " + redirectAttributes);
        Set<Role> roleSet = new HashSet<>();
        roleSet.add(Role.ADMIN);
        adminsList = userRepository.findAllByRolesIn(roleSet);
        model.addAttribute("usersList", userRepository.findAll());
        model.addAttribute("adminsList", adminsList);
        model.addAttribute("appName", appName);
        return "users";
    }

    @RequestMapping("user/delete/{id}")
    public String deleteUser(@PathVariable("id") int id, RedirectAttributes redirectAttributes) {
        logger.info("user_id_to_delete = " + id);
        Optional<User> userAdmin = adminsList.stream()
                .filter(user -> user.getId() == id)
                .findFirst();
        if (userAdmin.isPresent() && adminsList.size() == 1) {
            String errorMessage = "In system must have at least one administrator";
            logger.error(errorMessage);
            redirectAttributes.addAttribute("errorMessage", errorMessage);
        } else {
            userRepository.deleteById(id);
        }
        return "redirect:/users";
    }

после попытки удалить пользователя (метод deleteUser) успешно вызов

redirectAttributes.addAttribute("errorMessage", errorMessage);

И после этого успешного вызова метода getAllUsers. Но параметр redirectAttributes пуст.

1 Ответ

1 голос
/ 26 января 2020

На основе документации API

Модель RedirectAttributes пуста при вызове метода и никогда не используется, если метод не возвращает имя представления перенаправления или RedirectView.

После перенаправления атрибуты автоматически добавляются в модель контроллера, который обслуживает целевой URL.

errorMessage будет доступен в модели getAllUsers() после перенаправление.

...