tutorial mvc j_spring_security_check example enablewebsecurity ejemplo java spring spring-mvc

java - mvc - spring security login



Redirigir en Spring MVC (8)

¿Por qué no puedo hacer que esto funcione en mi controlador?

@RequestMapping(method = RequestMethod.POST) public String onSubmit( Model model, @ModelAttribute("form") Form form, BindingResult result, HttpServletRequest request) throws IOException, WriteException, BiffException { if (result.hasErrors()) { return "redirect:index.html"; } }

Yo obtengo:

javax.servlet.ServletException: No se pudo resolver la vista con el nombre ''redirect: index.html'' en el servlet con el nombre ''dispatcher''
org.springframework.web.servlet.DispatcherServlet.render (DispatcherServlet.java:1042)
org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:798)
org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:716)
org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.doPost (FrameworkServlet.java:560)
javax.servlet.http.HttpServlet.service (HttpServlet.java:637)
javax.servlet.http.HttpServlet.service (HttpServlet.java:717)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter (MonitorFilter.java:390)

Tengo esto para trabajar antes. ¿Por qué no ahora?


Es posible definir un urlBasedViewResolver en su archivo de propiedades:

excel.(class)=fi.utu.seurantaraporttisuodatin.service.Raportti index.(class)=org.springframework.web.servlet.view.urlBasedView index.viewClass =org.springframework.web.servlet.view.JstlView index.prefix = /WEB-INF/jsp/ index.suffix =.jsp


Intenta esto, debería funcionar si has configurado tu resolución de vista correctamente

return "redirect:/index.html";


La respuesta de Axtavt es correcta.

Así es como debe verse su resolvedor (basado en anotaciones):

@Bean UrlBasedViewResolver resolver(){ UrlBasedViewResolver resolver = new UrlBasedViewResolver(); resolver.setPrefix("/views/"); resolver.setSuffix(".jsp"); resolver.setViewClass(JstlView.class); return resolver; }

Obviamente, el nombre de su directorio de vistas debe cambiar en función de su proyecto.


Para completar las respuestas, Spring MVC usa viewResolver (por ejemplo, como axtavt metionned, InternalResourceViewResolver) para obtener la vista específica. Por lo tanto, el primer paso es asegurarse de que viewResolver esté configurado.

En segundo lugar, debe prestar atención a la url de redirección (redirigir o reenviar). Una URL que comienza con "/" significa que es un URL absoluto en la aplicación. Como dice Jigar,

return "redirect:/index.html";

Deberia trabajar. Si su vista se ubica en la raíz de la aplicación, Spring puede encontrarla. Si una url sin un "/", como esa en su pregunta, significa un pariente de url. Explica por qué funcionó antes y no funciona ahora. Si la página que llama "redirigir" se ubica en la raíz por casualidad, funciona. De lo contrario, Spring no puede encontrar la vista y no funciona.

Aquí está el código fuente del método de RedirectView of Spring

protected void renderMergedOutputModel( Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws IOException { // Prepare target URL. StringBuilder targetUrl = new StringBuilder(); if (this.contextRelative && getUrl().startsWith("/")) { // Do not apply context path to relative URLs. targetUrl.append(request.getContextPath()); } targetUrl.append(getUrl()); // ... sendRedirect(request, response, targetUrl.toString(), this.http10Compatible); }


Prueba esto

HttpServletResponse response; response.sendRedirect(".../webpage.xhtml");


Sé que es tarde, pero deberías tratar de redireccionar a un camino y no a un archivo, ja, ja


También tenga en cuenta que los prefijos de redirect: y forward: son manejados por UrlBasedViewResolver , por lo que debe tener al menos una subclase de UrlBasedViewResolver entre los resolvedores de vista, como InternalResourceViewResolver .


intente cambiar esto en su dispatcher-servlet.xml

<!-- Your View Resolver --> <bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <property name="basenames" value="views" /> <property name="order" value="1" /> </bean> <!-- UrlBasedViewResolver to Handle Redirects & Forward --> <bean id="urlViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" /> <property name="order" value="2" /> </bean>

Lo que sucede se explica claramente aquí http://projects.nigelsim.org/wiki/RedirectWithSpringWebMvc