2010-01-01 17 views
5

he creado un controlador que hace algo de lógica de negocio y crea un modelo. Si paso este modelo directamente para verlo, devuelvo ModelAndView con el nombre y el modelo de vista; todo funciona bien. Pero ahora quiero mostrar los resultados en otra página. Entonces uso el prefijo "redirigir:" para redirigir a otro controlador, pero el modelo se pierde.Spring MVC - Modelo pase entre controladores

lo que Im que falta?

Saludos, Oleksandr

Respuesta

0

Desde el prefijo redirect: corre otro controlador, perderá todo lo que tenía en la ModelAndView en el controlador anterior. Tal vez el controlador de lógica de negocios no debe ser un controlador en absoluto, tal vez debería simplemente convertirlo en una clase normal y hacer que el controlador de resultados lo llame. Entonces, el controlador de resultados podría guardar los datos en el modelo.

+1

Sí, puedo separar mi lógica comercial en otra clase. Pero para que esta lógica suceda, necesito parámetros de entrada. Los estoy obteniendo del usuario en mi primer controlador, y necesito una forma de pasarlos a otro controlador (resultado), que posteriormente llamará a la clase lógica de negocios. Mire, mi dificultad es pasar algunos datos (en este caso, los parámetros de entrada) entre los controladores (controlador de datos de entrada y controlador de resultados). – Oleksandr

4

Opción 1: Puede poner el modelo en sesión y recuperarlo en el controlador y anularlo en la sesión.

Opción 2: Usted ha dicho, está teniendo dos controladores, primero uno podría recuperar la entrada del usuario y hacer un poco de lógica de negocio y redirigir a otro. Mi sugerencia es mover la lógica de negocios que se coloca en ambos controladores a una clase y tener solo un controlador que devolvería el modelo y la vista al usuario.

+1

Pero cómo puedo guardar el modelo en sesión usando Spring-MVC con anotaciones. ¿Puedes darme un ejemplo? – Oleksandr

+4

ModelAndView mv = new ModelAndView(); mv.addObject ("clave1", "valor1"); mv.addObject ("clave2", "valor2"); mv.addObject ("key3", "value3"); . request.getSession() setAttribute ("modelo", mv.getModelMap()); – novice

+0

¡Muchas gracias por la respuesta! Estamos casi alli. Lo único que aún no entiendo es cómo almacenar parámetros en HttpSession con anotaciones. Por ejemplo, @SessionAttributes almacena datos entre solicitudes dentro del controlador.¿Hay alguna anotación que almacene datos es sesión de forma permanente. ¿O cómo podemos acceder a HttpSession con @RequestParam? ¿Hay alguna otra manera? – Oleksandr

0

yo no usaría @SessionAttributes ya que puede cambiar en futuras versiones de la primavera. Me gustaría seguir con la antigua usanza que Oleksandr se mostró anteriormente

alguna manera una entrada antigua, pero tal vez alguien más lo encontrará muy útil

11

puede utilizar el delantero: prefijo que en última instancia hace un RequestDispatcher.forward() inscribed of The redirect: prefix.

+0

Esta solución funcionó para mí. Gracias @Niraj – will824

2

Durante redirección: solicitud se envía utilizando el método GET con los parámetros adjuntas a la URL. Puede corregir un nuevo método en el controlador para recibir los parámetros de solicitud con la anotación @RequestParameter. Mientras que la reorientación de la simple solicitud añadir todos los parámetros como cadena

e.g ModelAndView mv = new ModelAndView(); 
mv.setViewName(redirect:/your/url); 
mv.addObject("param1", string_param); 
. 
. 
. 

De esta manera usted puede volver a dirigir con éxito.

Cuestiones relacionadas