2011-09-09 8 views
28

¿Cuál es la forma correcta de enviar una solicitud en primavera a un controlador diferente?Solicitud de reenvío del resorte 3.0 a un controlador diferente

@RequestMapping({"/someurl"}) 
public ModelAndView execute(Model model) { 
    if (someCondition) { 
     //forward to controller A 
    } else { 
     //forward to controller B 
    } 
} 

Todo el controlador tienen dependencias inyectados en la primavera, así que no puedo acaba de crear ellos y llamarlos a mí mismo, pero quiero atributos que se transmite a los otros controladores de la solicitud.

Respuesta

37

Intente devolver una Cadena en su lugar, y la Cadena es la url de reenvío.

@RequestMapping({"/someurl"}) 
public String execute(Model model) { 
    if (someCondition) { 
     return "forward:/someUrlA"; 
    } else { 
     return "forward:/someUrlB"; 
    } 
} 
+2

Aquí hay un enlace a la documentación para la primavera 3.0.x para RedirectView, que también cubre: hacia adelante. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#mvc-redirecting – digitaljoel

+0

¿Es posible hacer eso sin hardcoding "someUrlA"? –

6

Puede usar el nombre de vista como "redirect: controllerName" o "forward: controllerName". Este último reencaminará la solicitud a otro controlador y el anterior le indicará al navegador que redirija la solicitud a otra url.

1

Puede usar Spring RedirectView para enviar la solicitud de un controlador a otro controlador. Será por defecto Tipo de petición "GET"

RedirectView redirectView = new RedirectView("/controllerRequestMapping/methodmapping.do", true); 
+4

Redirigir no es hacia adelante. la redirección envía encabezados con el comando de redireccionamiento al cliente y al cliente solo sigue la ubicación, reenvía simplemente delegar el manejo de solicitudes a otro controlador dentro de la misma solicitud. – msangel

Cuestiones relacionadas