Как сохранить ошибки проверки весной с перенаправлением после POST?

Я пытаюсь выяснить, как «сохранить» значение BindingResult после публикации. Я хочу сделать перенаправление, но сохранить значение ошибок и показать их пользователю в jsp без перенаправления, это работает хорошо, но когда я делаю переадресацию, я потерять значение ошибки, это мой код

@RequestMapping(value="/ajouter",method=RequestMethod.POST)
    public String ajouterEnqueteur(HttpServletRequest request,Model model,
            @ModelAttribute("enqueteur")@Valid Enqueteur enqueteur ,BindingResult binding,RedirectAttributes attr,HttpSession session)
    {
        if (binding.hasErrors())
        {
            logger.debug(binding.toString());
            attr.addAttribute("enqueteur",enqueteur);
            attr.addAttribute("org.springframework.validation.BindingResult.enqueteur",binding);

        }
        else{
            enqueteurService.save(enqueteur);
            logger.debug("Enqueteur enregistré. adesse IP {}"+request.getRemoteAddr());
        }
        return "redirect:/enqueteurs/init.do";

    }

Когда я отправляю форму, я получаю это сообщение об ошибке:

message Failed to convert value of type 'com.glsid.gnrqst.entities.Enqueteur' to required type 'java.lang.String'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [com.glsid.gnrqst.entities.Enqueteur] to required type [java.lang.String]: no matching editors or conversion strategy found

description Le serveur a rencontré une erreur interne qui l''a empêché de satisfaire la requête.

exception

org.springframework.beans.ConversionNotSupportedException: Failed to convert value of type 'com.glsid.gnrqst.entities.Enqueteur' to required type 'java.lang.String'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [com.glsid.gnrqst.entities.Enqueteur] to required type [java.lang.String]: no matching editors or conversion strategy found
    org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:74)
    org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:40)
    org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:657)
    org.springframework.web.servlet.mvc.support.RedirectAttributesModelMap.formatValue(RedirectAttributesModelMap.java:79)
    org.springframework.web.servlet.mvc.support.RedirectAttributesModelMap.addAttribute(RedirectAttributesModelMap.java:71)
    org.springframework.web.servlet.mvc.support.RedirectAttributesModelMap.addAttribute(RedirectAttributesModelMap.java:34)
    com.glsid.gnrqst.controllers.EnqueteurController.ajouterEnqueteur(EnqueteurController.java:46)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:111)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:806)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:729)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
cause mère

java.lang.IllegalStateException: Cannot convert value of type [com.glsid.gnrqst.entities.Enqueteur] to required type [java.lang.String]: no matching editors or conversion strategy found
    org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:302)
    org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:108)
    org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:64)
    org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:40)
    org.springframework.validation.DataBinder.convertIfNecessary(DataBinder.java:657)
    org.springframework.web.servlet.mvc.support.RedirectAttributesModelMap.formatValue(RedirectAttributesModelMap.java:79)
    org.springframework.web.servlet.mvc.support.RedirectAttributesModelMap.addAttribute(RedirectAttributesModelMap.java:71)
    org.springframework.web.servlet.mvc.support.RedirectAttributesModelMap.addAttribute(RedirectAttributesModelMap.java:34)
    com.glsid.gnrqst.controllers.EnqueteurController.ajouterEnqueteur(EnqueteurController.java:46)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:111)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:806)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:729)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Может кто-нибудь помочь мне Merci d'Avance!


person e2rabi    schedule 04.03.2017    source источник
comment
Возможный дубликат stackoverflow .com/questions/2543797/   -  person Jakub Ch.    schedule 05.03.2017
comment
НЕТ, это не дублирующий вопрос! Я пробую решение по этой ссылке, но все еще имею некоторые исключения ошибок стека, поэтому я публикую свой код и исключение, которое я получаю, надеюсь получить некоторую помощь   -  person e2rabi    schedule 05.03.2017
comment
Проблема в другом вопросе выглядела очень похожей, поэтому я ее и предложил. Я помню, что RedirectAttributes решил похожую проблему с исключениями для меня. Но если это не сработало для вас, возможно, кто-то придумает правильный ответ. Привет.   -  person Jakub Ch.    schedule 05.03.2017
comment
почему вы хотите перенаправить?   -  person rmalchow    schedule 06.03.2017
comment
После публикации в действии формы URL-адрес, который я отправляю, все еще находится в URL-адресе навигатора, поэтому я хочу перенаправить. Я не хочу, чтобы это поведение просто сохраняло какой-то URL-адрес в навигаторе перед публикацией.   -  person e2rabi    schedule 06.03.2017


Ответы (1)


Предположим, у вас есть 2 контроллера. Если вы перенаправляете с одного контроллера на другой контроллер, значения в объекте модели не будут доступны в другом контроллере. Итак, если вы хотите поделиться значениями объекта модели, вы должны сказать в первом контроллере

ошибка, которую вы делаете, заключается в том, что вы должны заменить attr.addAttribute на attr.addFlashAttribute

attr.addFlashAttribute("org.springframework.validation.BindingResult.enqueteur", binding);
 attr.addFlashAttribute("enqueteur", enqueteur);
person j.Stark    schedule 06.03.2017