2011-09-12 16 views

Respuesta

21

Según se describe en la documentación, BeanNameViewResolver resuelve View s declarado como frijoles. Por lo general, lo necesita para algunas vistas de propósito especial.

Imagine, por ejemplo, que uno de sus controladores debe generar una hoja de cálculo de Excel. Así, subclase AbstractExcelView e implementar su lógica personalizada para hacer una hoja de cálculo basado en los valores de modelo:

public class MyExcelView extends AbstractExcelView { ... } 

y la declara como un grano:

<bean id = "myExcelView" class = "MyExcelView" /> 

Entonces declarar una BeanNameViewResolver lo hace disponible a los controladores: cuando el controlador devuelva ModelAndView con el nombre de vista myExcelView, se procesará la hoja de cálculo.

BeanNameViewResolver se utiliza generalmente en conjunción con algún otro punto de vista que se encarga de resolver vistas "normales" (por lo que si BeanNameViewResolver no puede encontrar un punto de vista, la otra de resolución trata de encontrar):

<bean class = "...BeanNameViewResolver"> 
    <property name = "order" value = "0" /> 
</bean> 

<bean class = "...InternalResourceViewResolver"> 
    <property name = "order" value = "1" /> 
    ... 
</bean> 
+0

+1 por ser más rápido que yo y tener algunos detalles que mi blob no tiene :) –

+0

+1 para una buena explicación. Un par de preguntas: 1) ¿beannameviewresolver necesita ser seguro para subprocesos? 2) ¿es internoresourceviewresolver thread-safe? – shrini1000

+0

muy buena explicación – Krishna

7

hecho la documentación no es fantástica

viewview in spring mvc es un bean que se traduce de nombres de vista a vistas.

Un nombre de vista es una cadena simple. Es devuelto por el método handleRequest() del controlador dentro del objeto ModelAndView.

ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) { 
    .... 
    return ModelAndView("thisIsTheViewName", ...); 
} 

Este nombre de vista se resuelve en una clase de vista real por la resolución de la vista.

El BeanNameViewResolver tiene un trabajo fácil: busca un bean de vista en el applicationContext que tiene este nombre de vista como su id.

<bean id="thisIsTheViewName" class="....MyView" /> 

Para aplicaciones simples, esta puede ser la forma más sencilla de traducir del nombre de la vista a la vista.

Cuestiones relacionadas