CodeGym/Cursos Java/Módulo 5. Spring/Reconocimiento de Representación

Reconocimiento de Representación

Disponible

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:

Tabla 3. Implementaciones de ViewResolver
VerResolver Descripción

AbstractCachingViewResolver

Las subclases

AbstractCachingViewResolver almacenan en caché las instancias de las vistas que reconocen. El almacenamiento en caché mejora el rendimiento de determinadas tecnologías de presentación. Puede deshabilitar el caché estableciendo la propiedad cache en false. Además, si necesita actualizar una vista específica mientras el programa se está ejecutando (por ejemplo, cuando cambia la plantilla de FreeMarker), puede utilizar el método removeFromCache(String viewName, Locale loc).

UrlBasedViewResolver

Una implementación simple de la interfaz ViewResolver que permite que los nombres de vistas lógicas se resuelvan directamente en URL sin definir explícitamente la vista. Esto es apropiado si sus nombres lógicos coinciden con los nombres de sus recursos de vista en una forma simple, sin necesidad de un mapeo arbitrario.

InternalResourceViewResolver

Una subclase conveniente de UrlBasedViewResolver que admite InternalResourceView (esencialmente servlets y JSP) y subclases como JstlView y TilesView. Puede configurar la clase de vista para todas las vistas creadas por este solucionador usando setViewClass(..). Para obtener más detalles, consulte el javadoc en UrlBasedViewResolver.

FreeMarkerViewResolver

Una subclase conveniente de UrlBasedViewResolver que admite FreeMarkerView y sus subclases personalizadas.

ContentNegotiatingViewResolver

Implementación de la interfaz ViewResolver que reconoce una vista según el nombre del archivo de solicitud o el encabezado Aceptar.

BeanNameViewResolver

Una implementación de la interfaz ViewResolver que interpreta el nombre de la vista como el nombre de un bean en el contexto de la aplicación actual. Esta es una opción muy flexible que le permite mezclar y combinar diferentes tipos de vistas según diferentes nombres de vistas. Cada una de estas implementaciones de View se puede definir como un bean, por ejemplo en clases XML o clases de configuración.

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 contrato

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.

Comentarios
  • Populares
  • Nuevas
  • Antiguas
Debes iniciar sesión para dejar un comentario
Esta página aún no tiene comentarios