Как я всегда могу вернуть текущую страницу, на которой находится пользователь, в сопоставлении запросов весной MVC? - PullRequest
0 голосов
/ 22 апреля 2020

Spring-Newb ie здесь.

У меня есть всплывающее окно входа в систему, которое можно открыть в заголовке моей страницы. Если вход успешен, я перенаправляю на страницу индекса, которая работает. Если попытка входа в систему возвращается с ошибкой, я хочу остаться на той же странице и просто отобразить ошибку внутри всплывающего окна входа в систему.

Имя входа отправляется с помощью HTML -формы в соответствующее сопоставление запросов. .

Теперь я борюсь с подавлением перенаправления. Я передаю целевую страницу html внутри контроллера в виде строки и пытаюсь теперь всегда «перенаправить» на текущую страницу, на которой находится пользователь.

Мне может даже не понадобиться перенаправление здесь , просто refre sh, но не знаю, как еще это решить, atm.

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

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@ModelAttribute("loginForm") @Valid LoginFormModel login,
        BindingResult result,
        Model model,
        HttpServletRequest request,
        HttpServletResponse response,
        HttpSession session) {

    if (result.hasErrors()) {
        setLoginError(login, model, request, session);
        return "index"; // here is where I don't want to redirect to the index in case of error
    }
}

Я использую Thymeleaf в качестве Templating Framework.

Я также думал о получении URL-адреса из запроса, но нашел только целевой URI, а не источник в объекте.

1 Ответ

0 голосов
/ 22 апреля 2020

Вы можете использовать это решение:

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@ModelAttribute("loginForm") @Valid LoginFormModel login,
                    BindingResult result,
                    Model model,
                    HttpServletRequest request,
                    HttpServletResponse response,
                    HttpSession session) throws IOException {

    if (result.hasErrors()) {
        response.sendRedirect(request.getContextPath() + request.getRequestURI());
        return null;
    }
}

В случае ошибки вы вернете ноль (без просмотра), но запрос будет перенаправлен в соответствии с объектом ответа (функциональность чистого сервлета):

 response.sendRedirect(request.getContextPath() + request.getRequestURI());

Вы можете попытаться опустить request.getContextPath (), если ваши URL не имеют префикса контекста (root context).

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