Подтвердите всплывающее окно/ошибку повторной отправки формы (после ошибки входа) в Spring MVC 3

Я получаю всплывающее окно «Подтвердить повторную отправку формы».

1) При обновлении страницы (после ошибок входа).

2) При нажатии кнопки «Назад» в браузере после отправки страницы входа (после ошибок входа).

Мой код контроллера:

// Showing Login Page
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String showLoginPage(ModelMap model) {

    model.addAttribute("credentials", new Credentials());
    return "login";
}

// Submitting Login Form
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@ModelAttribute("credentials") Credentials credentials,
        BindingResult result, ModelMap model) {

        // Validation on Login form fields
        validator.validate(credentials, result);
        if (result.hasErrors()) {
            return "login";
        }

        return "redirect:success";
} 

Мои шаги:

Случай 1:

i) Оставьте имя пользователя пустым и нажмите кнопку входа. Это покажет ошибку "имя пользователя нельзя оставить пустым"

ii) Теперь обновите страницу. Затем я получу всплывающее окно «Подтвердить повторную отправку формы».

Случай 2:

i) Повторите шаг 1 случая 1.

ii) Затем правильно заполните все поля и нажмите кнопку «Войти». Пользователь будет перенаправлен на страницу success.jsp

iii) теперь нажмите кнопку «Назад» в браузере, и я получу ошибку «Подтвердить повторную отправку формы» на странице.

Как я могу удалить эту проблему. Где ошибка в моем коде? Пожалуйста, помогите мне.

Спасибо.


person Manoj Agarwal    schedule 03.01.2014    source источник
comment
в вашем коде нет ошибки. это стандартное поведение браузера на страницах, где вы отправляете запросы HTTP POST. Если вы хотите переопределить это поведение, вам придется написать собственный код.   -  person Arvind Sridharan    schedule 03.01.2014
comment
Подтвердите повторную отправку формы, написан ли какой-либо JavaScript?   -  person Oomph Fortuity    schedule 03.01.2014
comment
Почему тег spring-webflow? Кажется, в вопросе нет ничего, связанного с этим, но, может быть, вы используете его и думаете, что это может быть связано с поведением?   -  person dbreaux    schedule 06.01.2014


Ответы (1)


Вместо переадресации на login jsp при ошибке вы можете сохранить BindingResult в RedirectAttributes, а затем вместо этого перенаправить на login. Полученный результат POST-REDIRECT-GET должен решить проблему «подтвердить повторную отправку формы» для ошибок входа.

@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@ModelAttribute("credentials") Credentials credentials,
        BindingResult result, ModelMap model, RedirectAttributes attrs) {

        // Validation on Login form fields
        validator.validate(credentials, result);
        if (result.hasErrors()) {
            attrs.addFlashAttribute("org.springframework.validation.BindingResult.credentials", result);
            attrs.addFlashAttribute("credentials", credentials);
            return "redirect:login"; // Redirect to login, rather than forward
        }

        return "redirect:success";
} 
person Will Keeling    schedule 03.01.2014
comment
Спасибо @Уилл Килинг. Но это не работает. Теперь он не показывает никаких сообщений об ошибках на странице входа. Нужно ли мне также вносить какие-либо изменения в метод Get? И я также не могу перейти на страницу успеха, если нет ошибки. Это всегда держит меня на странице входа. Пожалуйста, предложите мне. Я использовал ваш код как таковой. - person Manoj Agarwal; 06.01.2014
comment
@ManojAgarwal - вы используете Spring 3.1 или выше? - person Will Keeling; 06.01.2014
comment
Да, я использую Spring 3.1. - person Manoj Agarwal; 06.01.2014