Как проверить некоторые поля в опубликованной форме в HandlerInterceptorAdapter - PullRequest
0 голосов
/ 27 октября 2011

Я пишу CaptchaInterceptor на основе HandlerInterceptorAdapter.В методе preHandle я должен проверить значение capcha.Как из этого метода добавить сообщения об ошибках и отправить пользователя обратно в форму с недопустимым значением какти и не потерять введенные пользователем данные?

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
/*  Validate */
String kaptchaExpected = (String)request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
String kaptchaReceived = request.getParameter("j_kaptcha");
    if (!StringUtils.endsWithIgnoreCase(kaptchaReceived,kaptchaExpected))
    {
     // add errorMessage
     // reset request values?
     response.sendRedirect(request.getHeader("Referer"));

    return false;
    }
return true;
}

Или добавить ошибки и отправить запрос обработчику.В BindingResult контроллер объектов как-то найдет ошибки и отправит все данные обратно.

1 Ответ

0 голосов
/ 17 ноября 2011

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

public void postHandle(HttpServletRequest request, HttpServletResponse response, 
                       Object handler, ModelAndView modelAndView) {
    //Best to put them in some sort of iterable, so your UI can iterate over them
    Object errorMessages = 
        request.getSession().getAttribute(ERROR_MESSAGES_CONSTANT);

    modelAndView.addObject("errorMessages", errorMessages);
}

Внутри вашего представления вам нужно обработать сообщения об ошибках (если они существуют).

Как только это будет сделано, вы захотите удалить его из сеанса (чтобы они не видели одно и то же сообщение на каждой странице).

public void postHandle(HttpServletRequest request, HttpServletResponse response,
                       Object handler, ModelAndView modelAndView) {

  request.getSession().setAttribute(ERROR_MESSAGES_CONSTANT, null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...