2011-09-12 30 views

回答

21

如文档中所述,BeanNameViewResolver决议将View声明为bean。通常你需要它来获得一些特殊用途的视图。

想象一下,例如,您的一个控制器应呈现Excel电子表格。所以,你继承AbstractExcelView和基于模型值实现自定义的逻辑来呈现一个电子表格:

public class MyExcelView extends AbstractExcelView { ... } 

,并宣布它作为一个bean:

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

然后宣布的BeanNameViewResolver使其可供控制器:当控制器返回ModelAndView且视图名称myExcelView时,将会呈现您的电子表格。

BeanNameViewResolver通常一起使用,用于处理“普通”视图一些其他视图解析器(这样,如果BeanNameViewResolver无法取景,其他解析器试图找到它)​​:

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

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

为+1比我快,并有一些细节,我blob没有:) –

+0

+1的很好的解释。几个问题:1)beannameviewresolver是否需要线程安全? 2)internalresourceviewresolver线程安全吗? – shrini1000

+0

很好的解释 – Krishna

7

事实上该文件并不是太棒了。

Spring MVC中的视图解析器是一个从视图名称转换为视图的bean。

视图名称是简单的字符串。它由ModelAndView对象内的控制器的handleRequest()方法返回。

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

这个视图名称解析由视图解析器实际视图类。

BeanNameViewResolver有一个简单的工作:它在applicationContext中查找具有此视图名称作为其id的视图bean。

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

对于简单的应用程序,这可以是从视图名称转换到视图的最简单方法。