2011-09-12 13 views

risposta

21

Come descritto nella documentazione, BeanNameViewResolver risolve View s dichiarati come bean. Di solito ne hai bisogno per alcune viste speciali.

Immaginate, per esempio, che uno dei vostri controller debba rendere un foglio di calcolo Excel. Quindi, si sottoclasse AbstractExcelView e l'implementazione della logica personalizzata per rendere un foglio di calcolo basato sui valori del modello:

public class MyExcelView extends AbstractExcelView { ... } 

e dichiararlo come un fagiolo:

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

Poi dichiara un BeanNameViewResolver mette a disposizione dei controllori: quando il controller restituisce ModelAndView con il nome della vista myExcelView, il foglio di calcolo verrà visualizzato.

BeanNameViewResolver di solito è usato in congiunzione con qualche altro vista resolver che gestisce vista "regolari" (in modo che se BeanNameViewResolver non riesce a trovare una vista, l'altra resolver cerca di trovarlo):

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

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

+1 per essere più veloce di me e avere alcuni dettagli che il mio blob non ha :) –

+0

+1 per una buona spiegazione. Un paio di domande: 1) beannameviewresolver deve essere thread-safe? 2) è internalresourceviewresolver thread-safe? – shrini1000

+0

spiegazione molto buona – Krishna

7

Infatti la documentazione non è fantastica

Il resolver di vista in primavera mvc è un bean che si traduce dai nomi delle viste alle viste.

Un nome di vista è una stringa semplice. Viene restituito dal metodo handleRequest() del controller all'interno dell'oggetto ModelAndView.

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

Questo nome di vista è stato risolto in una classe di vista effettiva dal resolver di vista.

BeanNameViewResolver ha un lavoro semplice: Cerca un bean di visualizzazione in applicationContext che ha questo nome di vista come id.

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

Per applicazioni semplici questo può essere il modo più semplice per tradurre dal nome della vista alla vista.

Problemi correlati