Una guía para ViewResolver en Spring MVC

1. Información general

Todos los marcos MVC proporcionan una forma de trabajar con vistas.

Spring lo hace a través de los resolutores de vistas, que le permiten representar modelos en el navegador sin vincular la implementación a una tecnología de vista específica.

Los ViewResolver Maps nombres a los verdaderos puntos de vista.

Y el marco de Spring viene con bastantes resolutores de vistas, por ejemplo , InternalResourceViewResolver , XmlViewResolver , ResourceBundleViewResolver y algunos otros.

Este es un tutorial simple que muestra cómo configurar los resolutores de vista más comunes y cómo usar múltiples ViewResolver en la misma configuración .

2. La configuración de Spring Web

Comencemos con la configuración web; lo anotaremos con @EnableWebMvc , @Configuration y @ComponentScan :

@EnableWebMvc @Configuration @ComponentScan("com.baeldung.web") public class WebConfig implements WebMvcConfigurer { // All web configuration will go here }

Es aquí donde configuraremos nuestro solucionador de vistas en la configuración.

3. Agregue un InternalResourceViewResolver

Este ViewResolver nos permite establecer propiedades como prefijo o sufijo para el nombre de la vista para generar la URL de la página de vista final:

@Bean public ViewResolver internalResourceViewResolver() { InternalResourceViewResolver bean = new InternalResourceViewResolver(); bean.setViewClass(JstlView.class); bean.setPrefix("/WEB-INF/view/"); bean.setSuffix(".jsp"); return bean; }

Para que el ejemplo sea tan simple, no necesitamos un controlador para procesar la solicitud.

Solo necesitamos una página jsp simple , ubicada en la carpeta / WEB-INF / view como se define en la configuración:

4. Agregue un ResourceBundleViewResolver

Como sugiere el nombre de este solucionador, ResourceBundleViewResolver utiliza definiciones de bean en un ResourceBundle .

Primero, agregamos ResourceBundleViewResolver a la configuración anterior:

@Bean public ViewResolver resourceBundleViewResolver() { ResourceBundleViewResolver bean = new ResourceBundleViewResolver(); bean.setBasename("views"); return bean; } 

El paquete generalmente se define en un archivo de propiedades, ubicado en la ruta de clases. A continuación se muestra el archivo views.properties :

sample.(class)=org.springframework.web.servlet.view.JstlView sample.url=/WEB-INF/view/sample.jsp

También podemos usar la página jsp simple definida en el ejemplo anterior para esta configuración.

5. Agregue un XmlViewResolver

Esta implementación de ViewResolver acepta un archivo de configuración escrito en XML con el mismo DTD como de primavera XML fábricas de frijol:

@Bean public ViewResolver xmlViewResolver() { XmlViewResolver bean = new XmlViewResolver(); bean.setLocation(new ClassPathResource("views.xml")); return bean; }

A continuación se muestra el archivo de configuración, views.xml :

En cuanto a los ejemplos anteriores, podemos usar nuestra página jsp simple definida previamente.

6. Encadenamiento de ViewResolvers y definición de una orden de prioridad

Spring MVC también admite varios resolutores de vista .

Esto le permite anular vistas específicas en algunas circunstancias. Podemos simplemente encadenar resolutores de vista agregando más de un resolutor a la configuración.

Una vez que hayamos hecho eso, tendremos que definir un orden para estos resolutores. La propiedad de orden se utiliza para definir cuál es el orden de las invocaciones en la cadena. Cuanto mayor sea la propiedad de orden (número de orden más grande), más tarde se posiciona el resolver de vista en la cadena.

Para definir el orden, podemos agregar la siguiente línea de código a la configuración de nuestros resolutores de vista:

bean.setOrder(0);

Tenga cuidado con la prioridad del orden, ya que InternalResourceViewResolver debería tener un orden superior, porque está destinado a representar una asignación muy explícita. Y si otros resolutores tienen un orden superior, es posible que InternalResourceViewResolver nunca se invoque.

7. Conclusión

En este tutorial configuramos una cadena de resolutores de vistas usando la configuración de Java. Jugando con la prioridad de orden podemos establecer el orden de su invocación.

La implementación de este sencillo tutorial se puede encontrar en el proyecto github.