2010-03-02 3 views
5

è possibile utilizzare InternalResourceViewResolver e BeanNameViewResolver insieme nella stessa app Web?Risolutori di molle e di viste

Intendo InternalResourceViewResolver per risolvere il mio jsp.

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/> 

e invece BeanNameViewResolver a risolvere il mio Excel (ho bisogno di passare l'url).

Ciao. Grazie

+0

Ho notato che la nuova sintassi di Spring 3 'p: xyz' sta diventando popolare tra SO persone ... Non mi piace, io stesso, trovo confuso. Forse sto solo invecchiando. – skaffman

risposta

3

Sì, è possibile combinare più resolver. Spring itera su di loro e usa il primo risolutore che è in grado di risolvere il nome dato. È inoltre possibile impostare la proprietà order nei resolver per specificare l'ordine di iterazione.

9

Puoi avere tanti resolver di visualizzazione nel tuo contesto che desideri, Spring li sorveglierà uno alla volta finché non ne ridurrà uno che risolve la vista.

C'è una grande avvertimento, però:

Nota: Quando concatenamento ViewResolvers, un InternalResourceViewResolver sempre ha bisogno di essere ultima, in quanto tenterà di risolvere qualsiasi nome di vista, non importa se esiste la risorsa sottostante .

Questo è un "difetto" con l'API servlet, dal momento che la InternalResourceViewResolver non ha modo di sapere se la risorsa esiste prima di averla provata.

Quindi assicurarsi che il BeanNameViewResolver sia definito prima del InternalResourceViewResolver o specificare esplicitamente la proprietà order su ciascuno.

+0

Grazie! L'attributo ordine è necessario solo se sono nello stesso contesto servlet. Voglio dire se ho un contesto servlet per il jsp dove sto usando InternalResourceViewResolver e un altro per i file excel dove sto usando BeanNameViewResolver Non ho bisogno di usare l'ordine. Giusto? Sono indipendenti .. – andrew0007

+0

Esatto. L'attributo 'order' è richiesto solo se si trovano nello stesso contesto, * e * non sono già nel giusto ordine fisico nel file. – skaffman