Inspiracja , wiedza , realizacja
Jsystems

W przebudowie

Login



Java

Oracle

Linux

Android

PostgreSQL

Microsoft SQL Server

Przekazywanie obiektów i list do warstwy widoku

Data dodania: Jun 27, 2016
Data aktualizacji: Jun 27, 2016

Kod źródłowy do poniższych przykładów znajdziesz pod adresem:

http://jsystems.pl/storage/spring/springmvc3.zip


Sama idea MVC zakłada rozdzielenie warstw biznesowej, danych i widoku od siebie. Tak więc i w naszym przypadku danych nie będziemy pobierali bezpośrednio na poziomie widoku. Kontroler przekaże do widoku dane pochodzące z DAO. Dao będzie jednak zaślepką, nie będziemy pobierali danych z bazy danych, gdyż nie tym się tutaj zajmujemy :)

Konstrukcja aplikacji jest bardzo zbliżona do przykładów z poprzednich rozdziałów, dochodzi nam za to kilka nowych elementów. Zakładam że masz już działającą aplikację, którą teraz będziemy rozbudowywać. Zaczniemy od stworzenia osobnych pakietów na DAO i klasy domenowe. Następnie tworzymy zwykłą klasę POJO jaką widac poniżej. Obiekty tej klasy będą reprezentowały samochody których dane będziemy wyświetlać. Konstruktor sparametryzowany w tym przykładzie nie jest niezbędny, stosuje go dla własnej wygody. Musimy za to mieć w tej przynajmniej gettery do pól, gdyż w warstwie widoku będziemy używali tagów JSTL które tego wymagają.



Tworzę teraz takie fake'owe DAO które będzie nam zwracało przykładowe dane. Potrzebujemy dwóch metod – jednej zwracającej pojedynczy samochód, drugiej zwracającej ich całą listę:



Będziemy mieli dwa widoki – jeden wyświetlający listę samochodów, drugi wyświetlający tylko Poloneza ;) Tworzę więc dwa kontrolery:






Mała uwaga dla osób które już troszeczkę Spring MVC znają : "tak, wiem że powinienem tutaj użyć AOP i @Autowired zamiast po prostu deklarować obiekt klasy dao (i to jeszcze na poziomie metody !!! ) , ale popełniam takie bluźnierstwo aby nie komplikować życia osobom początkującym :)


Nowy element jaki się tutaj pojawia to model.addAttribute z przekazaniem obiektu, lub w drugim kontrolerze listy obiektów. Wcześniej przekazywaliśmy wyłącznie komunikat tekstowy. Właściwie możemy tutaj przekazać cokolwiek, różnica będzie jedynie w dostępie do tych danych na poziomie widoku. Pamiętać musimy że z racji używania tagów JSTL w widoku, jeśli przekazujemy jakiś obiekt a zamierzamy odwoływać się na poziomie widoku do jego pól, to pola te muszą posiadać gettery.

Dodałem też dwa pliki JSP na potrzeby dwóch osobnych widoków. Poniżej widok prezentujący dane jednego samochodu:



Zauważ że przed polem obiektu podaję taką nazwę, pod jaką przekazałem obiekt w klasie PokazJeden (linia 24). Efekt działania:


Poniżej kod pliku JSP odpowiedzialnego za wyświetlenie listy samochodów:




Konstrukcja c:forEach nie jest elementem Springa. To są standardowe taki JSTL jakimi mógłbys się posługiwać w aplikacji złożonej np. Z serwletów i plików JSP. Pamiętaj jednak o konieczności wskazania co oznacza prefix c (u mnie w linii 6). Bez tego nic się nie wyswietli.


Efekt działania: