Spring MVC define las interfaces ViewResolver y View que le permiten representar modelos en el navegador sin comprometerlo con una tecnología de presentación específica. ViewResolver proporciona una asignación entre los nombres de las vistas y las vistas reales. View se ocupa de preparar los datos antes de pasarlos a una tecnología de presentación específica.
La siguiente tabla proporciona información más detallada sobre la jerarquía ViewResolver:
| VerResolver | Descripción |
|---|---|
|
|
Las subclases
|
|
|
Una implementación simple de la interfaz |
|
|
Una subclase conveniente de |
|
|
Una subclase conveniente de |
|
|
Implementación de la interfaz |
|
|
Una implementación de la interfaz |
Procesamiento
Puede encadenar resolutores de vista declarando más de un bean de resolución y, opcionalmente, configurando la propiedad order para especificar el orden. Recuerde que cuanto mayor sea la propiedad de orden, más adelante en la cadena se ubicará el solucionador de vistas.
El ViewResolver especifica que puede devolver nulo para determinar que no se puede encontrar la vista. Sin embargo, en el caso de JSP y InternalResourceViewResolver, la única manera de saber si el JSP existe es enviarlo a través de RequestDispatcher. Por lo tanto, siempre debes colocar el InternalResourceViewResolver en tu configuración en último lugar en el orden general de los solucionadores de vistas.
Configurar la resolución de la vista es tan simple como agregar beans ViewResolver a su configuración de Spring. MVC Config proporciona una API de configuración especial para solucionadores de vistas y para agregar controladores de vistas sin algoritmos, que son útiles para representar plantillas HTML sin control de algoritmos.
Reenvío
El prefijo especial redirect: en el nombre de la vista le permite realizar la redirección. UrlBasedViewResolver (y sus subclases) reconoce esto como un comando para realizar la redirección necesaria. El resto del nombre de la vista es la URL de redireccionamiento.
El resultado final es el mismo que si el controlador devolviera RedirectView, pero ahora el controlador mismo puede trabajar con nombres de vistas lógicas. Un nombre de vista lógica (como redirect:/myapp/some/resource) redirige en relación con el contexto actual del servlet, mientras que un nombre como redirect:https://myhost.com/some/arbitrary/path, redirecciona a una URL absoluta.
Tenga en cuenta que si un método de controlador está anotado con @ResponseStatus, el valor de la anotación tiene prioridad sobre el estado de respuesta establecido por RedirectView.
Redirección
También puede utilizar el prefijo especial forward: para los nombres de las vistas, que en última instancia se resuelven mediante UrlBasedViewResolver y las subclases. Esto crea un InternalResourceView que ejecuta RequestDispatcher.forward(). Por lo tanto, este prefijo no es útil cuando se usa InternalResourceViewResolver y InternalResourceView (para JSP), pero puede ser útil si está utilizando una tecnología de presentación diferente pero aún necesita fuerza que el recurso sea redirigido para su procesamiento mediante servlet/contenedor JSP. Tenga en cuenta que también es posible encadenar varios solucionadores de vistas.
Coordinación de contenidos
ContentNegotiatingViewResolver no resuelve las vistas por sí mismo, sino que delega este trabajo a otros solucionadores de vistas y obtiene una vista similar a la solicitada por el cliente. La vista se puede especificar desde el encabezado Aceptar o desde un parámetro de solicitud (por ejemplo, "/path?format=pdf").
ContentNegotiatingViewResolver selecciona la View adecuada para procesar la solicitud comparando los tipos de datos de la solicitud con el tipo de datos (también conocido como Content-Type ) soportado por View asociado con cada uno de sus ViewResolvers. La primera View de la lista que tiene un Content-Type compatible devuelve la vista al cliente. Si la cadena ViewResolver no proporciona una vista compatible, se utiliza la lista de vistas especificadas en la propiedad DefaultViews. Esta última opción es adecuada para Views únicas que pueden representar la vista correspondiente del recurso actual independientemente del nombre de la vista lógica. El encabezado Aceptar puede contener comodines (por ejemplo, text/*), en este caso View, cuyo Content-Type es igual a text/xml, es compatible.
GO TO FULL VERSION