Domanda

Sto creando un'applicazione utilizzando Spring MVC. Voglio apportare alcune modifiche al mio modello per ogni controller dell'applicazione. In particolare, voglio inserire nel modello alcuni dati extra che saranno presenti per tutte le pagine dell'applicazione.

Potrei farlo in diversi modi: basta aggiungere i dati alla fine di ogni controller, utilizzare una sottoclasse di Model che aggiunge i miei dati extra, utilizzare una sottoclasse di ModelAndView che avvolge il mio modello, utilizzare una sottoclasse di VelocityView che avvolge il Modella prima di usarla ... Sono sicuro che ci sono altre opzioni.

Ma ho un "eleganza" vincolo: non voglio scrivere codice in ogni controller, voglio che questo comportamento sia definito in posto unico . Idealmente, sarebbe controllato dal mio file di configurazione del bean IOC.

Qualcuno ha una raccomandazione su come raggiungere questo elegantemente?

È stato utile?

Soluzione

Gli aspetti sono un buon approccio, ma Spring MVC lo rende ancora più semplice: puoi definire un HandlerInterceptor che verrà chiamato prima o dopo ogni volta che viene gestita una richiesta. Nel metodo postHandle HandlerInterceptor (nella tua classe che implementa l'interfaccia HandlerInterceptor) puoi aggiungere i tuoi dati a ModelAndView. Definisci quali gestori devono essere intercettati nel tuo file di configurazione.

Altri suggerimenti

Puoi dare un'occhiata all'utilizzo di Aspetti. Spring ha persino un'estensione AOP che potresti usare .

In breve un aspetto ti permetterebbe di definire il codice una volta che poi verrebbe "tessuto". nelle tue classi quando compili le classi o quando vengono caricate dal classloader. È roba relativamente avanzata e non è la cosa più intuitiva per i nuovi programmatori, ma ha lo scopo di risolvere esattamente il problema a cui ti stai riferendo.

Potrei sbagliarmi, ma sospetto che potresti aver descritto i tuoi requisiti in modo errato.

Sembra che tu stia dicendo "Voglio che alcuni dati vengano aggiunti al mio modello, per tutti i controller".

Sospetto che tu intenda "Voglio che determinati dati siano disponibili per tutte le visualizzazioni".

Se i miei sospetti sono corretti, l'aggiunta dei dati al modello sta inquinando il modello e violando il principio della responsabilità singola. Ciò è particolarmente vero se gli stessi dati devono essere aggiunti a più modelli. Fai attenzione a non utilizzare il tuo modello come comodo "vettore" dei dati, in cui i dati non hanno nulla a che fare con il modello.

Certo, non conosco completamente il modo di fare Spring MVC, ma un esempio più dettagliato di ciò che stai cercando di ottenere potrebbe consentire una discussione più informata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top