2009-07-26 9 views
24

Zastanawiam się nad możliwością użycia Spring MVC z Vaadin Framework. Czy są jakieś udokumentowane sposoby, aby sprawić, że będą ładnie grać razem? Czy warto używać ich razem? dotyczące wydajności; Mam zamiar uruchomić aplikację na dedykowanym serwerze.Integracja VaVin i Spring MVC

Aby moje pytanie było nieco bardziej jasne, w jaki sposób mogę zwrócić modelandview ze Spring MVC Controller, który będzie renderował za pomocą Vaadin i może uzyskać dostęp do wszystkich danych modelu.

Odpowiedz

20

Wiosenne wsparcie dla Vaadina jest całkiem nowe, ale ostatnio dużo się o nim mówiło na forum, a niektórzy go testowali. Wydaje się działać. Jest artykuł na Vaadin wiki o nim, a niektóre wątki na forum mówić o Vaadin + sprężyna integracji:

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

będę odwoływać się bardzo kompletny SpringApplication: http://dev.vaadin.com/svn/incubator/SpringApplication/ – rochb

+3

Ja również poszukuje integracji Vaadin z wiosennym MVC. Odpowiedź, którą podałeś, to integracja ze Spring (wtrysk zależności itp.). Nie widzę tego ... Dzięki –

+0

Dodam także: http://dev.vaadin.com/ticket/4132 i http://vaadin.com/forum/-/message_boards/message/112083, ale jest w zasadzie o tym samym –

2

Zobacz this thread na Forum Vaadin dla mojego rozwiązania AutowiringApplicationServlet, w tym przykładowa aplikacja WAR.

+1

Bardziej zaawansowane rozwiązanie jest teraz dostępne jako dodatek Spring Stuff: https://vaadin.com/directory#addon/spring-stuff – Archie

5

Nie jestem pewien, czy jest to rozważny wybór, aby zintegrować vaadin ze Spring MVC. To marnotrastwo. MVC jest przeznaczone dla typowych aplikacji internetowych opartych na stronach WWW, gdzie vaadin ma więcej informacji na temat stanu, niż aplikacja komputerowa. Zazwyczaj spotykam się w środku i mam wiosnę warstwę biznesową i warstwę dostępu do danych i używam Vaadin, tak jak jest.

1

uzgodniony z dhrbo.

nie jest mądry używać sprężyny z mvc, bardziej z webflow z vaadin. vaadin to kolejna struktura aplikacji internetowych.

Jeśli chcesz mieć pomysł "spring mvc" w swoim projekcie vaadin, zintegruj go z spring-core, fasolą i kontekstem. w ten sposób można uzyskać wyraźny rozdział między kontrolerami, ui (vaadin) i modelami (integracja z hibernacją/ormami).

0

org.springframework.web.servlet.mvc.Controller jest handleRequest trwa HttpServletRequest i HttpServletResponse jako parametry. Z tego nie można przetworzyć fragmentu URI. W związku z tym kontroler nie nadaje się do kontrolowania żądań na podstawie fragmentu URI.

W mojej aplikacji zaimplementowałem bardzo podobną koncepcję do kontrolera Spring. Moja aplikacja wciąż ma pojęcie "widoków" i "modelu". Każdy widok jest zaimplementowany w oddzielnej klasie i jest wyświetlany w centralnym bloku strony. Chciałem scentralizować logikę przetwarzania URL do tej klasy, więc stworzyłem klasę AbstractControllerEntry:

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

z kilku podklas convenience, takich jak ConstantEntry, PrefixEntry i RegexEntry.

Każda klasa widoku ma metodę statyczną, która zwraca AbstractControllerEntry.Zbiór wszystkich pozycji przechowywany jest w statycznej tablicy wewnątrz klasy MyController (nie jest to kontroler Spring MVC). Po zmianie fragmentu (patrz UriFragmentUtility), powtarzam wszystkie wpisy, a po pierwsze, które mecze, będę wywoływać otwarte. Każda inna logika, taka jak znalezienie obiektu modelu, znajduje się wewnątrz klasy widoku, w implenacji AbstractControllerEntry.

Dodatkowo istnieje inna statyczna metoda generowania fragmentu URI w klasie widoku, dzięki czemu każde odniesienie do widoku jest prawdziwym odwołaniem do klasy, jest to rozwiązanie dla przerwanych łączy. A każdy widok ma metodę instancji, aby uzyskać fragment dla bieżącego widoku, który jest sprawdzany w celu dopasowania do wpisu kontrolera w celu zwiększenia niezawodności.