2009-07-26 6 views
24

Sto pensando alla possibilità di utilizzare Spring MVC con Vaadin Framework. Esistono modi documentati per farli giocare bene insieme? Inoltre è una buona idea usarli insieme? relativo alle prestazioni; Ho intenzione di eseguire l'app su un server dedicato.Vaadin e Spring MVC Integration

Per rendere la mia domanda un po 'più chiara, come posso restituire un modelandview da un controller MVC Spring che eseguirà il rendering utilizzando Vaadin e può accedere a tutti i dati del modello.

risposta

20

Il supporto di primavera per Vaadin è piuttosto nuovo, ma di recente si è parlato molto del forum e alcuni lo hanno testato. Sembra funzionare. C'è un articolo sul wiki Vaadin su di esso, e alcuni thread del forum a parlare di Vaadin + Spring integrazione:

Wiki: Spring Integration
Forum: can it mill toolkit be integrated with spring application
Forum: Spring integration problem
Forum: Working with Spring
Forum: Spring Integration

+1

Fare riferimento alla SpringApplication molto completa: http://dev.vaadin.com/svn/incubator/SpringApplication/ – rochb

+3

Stavo anche cercando l'integrazione Vaadin con Spring MVC. La risposta che hai dato è l'integrazione con Spring (dipendenza, ecc.). Non vedo nulla di tutto questo ... Grazie –

+0

Vorrei anche aggiungere: http://dev.vaadin.com/ticket/4132 e http://vaadin.com/forum/-/message_boards/message/112083 ma è praticamente lo stesso –

2

Vedi this thread sulla Forum Vaadin per la mia soluzione AutowiringApplicationServlet, inclusa un'applicazione WAR di esempio.

+1

Una soluzione più evoluta è ora disponibile come componente aggiuntivo Spring Stuff: https://vaadin.com/directory#addon/spring-stuff – Archie

5

Non sono sicuro se sia una scelta prudente integrare Vaadin con Spring MVC. È uno spreco. MVC è pensato per le tipiche applicazioni web basate su pagine dove vaadin è più basato sullo stato di visualizzazione come un'applicazione desktop. In genere farei un incontro nel mezzo e ho il mio livello di business e il livello di accesso ai dati in primavera e uso Vaadin così com'è.

1

concordato con dhrbo.

non è consigliabile utilizzare il mvc a molla, soprattutto con il flusso web con vaadin. vaadin è un'altra struttura per le app Web.

se si desidera l'idea di "spring mvc" nel progetto vaadin, integrarlo con spring-core, bean e contesto. in questo modo è possibile ottenere una netta separazione tra controller, ui (vaadin) e modelli (integrare con hibernate/orms)

0

org.springframework.web.servlet.mvc.Controller 's handleRequest prende un HttpServletRequest e HttpServletResponse come parametri. Da questi, non è possibile elaborare il frammento URI. Pertanto, il controller non è adatto per il controllo delle richieste in base al frammento URI.

Nella mia applicazione, ho implementato un concetto molto simile al controller Spring. La mia applicazione ha ancora la nozione di "viste" e "modello". Ogni vista è implementata in una classe separata e viene visualizzata in un blocco centrale della pagina. Volevo di centralizzare la logica del trattamento URL a quella classe, così ho creato una classe AbstractControllerEntry:

public static abstract class AbstractControllerEntry { 
    public abstract boolean matches(String fragment); 
    public abstract void open(MainWindow window, String fragment); 
} 

con diverse sottoclassi di convenienza, come ConstantEntry, PrefixEntry e RegexEntry.

Ogni classe di viste ha un metodo statico, che restituisce AbstractControllerEntry.La raccolta di tutte le voci è conservata in un array statico all'interno della classe MyController (non un controller MVC Spring). Al cambio dei frammenti (vedi UriFragmentUtility), Itero tutte le voci e, per prima cosa, che corrisponde, chiamerò aperto. Qualsiasi altra logica, come la ricerca dell'oggetto del modello, si trova all'interno della classe di visualizzazione, nel caso di impianto AbstractControllerEntry.

In aggiunta, esiste un altro metodo statico per generare il frammento URI nella classe di visualizzazione, in modo che ogni riferimento a una vista sia un riferimento reale a una classe, questa è una soluzione ai collegamenti interrotti. Ogni vista ha un metodo di istanza per ottenere un frammento per la vista corrente, che viene verificato per corrispondere a una voce del controller per aumentare la robustezza.