Inspiracja , wiedza , realizacja
Jsystems

W przebudowie

Login



Java

Oracle

Linux

Android

PostgreSQL

Microsoft SQL Server

Najprostszy formularz

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

Kod źródłowy aplikacji którą tworzę w niniejszym kursie jest do pobrania z adresu:

http://www.jsystems.pl/storage/spring/springform1.zip


Zrobimy sobie najprostszy możliwy formularz do dodawania samochodów. Struktura plików konfiguracyjnych jest identyczna jak w poprzednich rozdziałach, tak więc od razu przejdę do części właściwej tj. Tego co potrzebne do stworzenia i obsługi formularza.


Zaczynamy od stworzenia klasy domenowej – czyli klasy której obiekty będą reprezentować dodawane samochody.




Klasa posiada trzy pola które będziemy uzupełniać poprzez formularz. Pola są prywatne, ponieważ w klasie dostępne są również settery i gettery do nich. Te musimy posiadać ze względu na wymagania samego Springa. Przeciążona metoda toString ani konstruktory widoczne poniżej nie są wymagane. Stworzyłem je wyłącznie dla własnej wygody przy późniejszej pracy.


Przejdźmy teraz do klasy kontrolera:




Spring obsługuje adresy zaczynające się od "/formularze" – kwestia konfiguracji w web.xml. Sama klasa kontrolera obsługuje więc adres : /formularze/formularz

Jest to mapowanie na poziomie klasy omawiane we wcześniejszych rozdziałach. Kontroler zawiera metody które będą obsługiwały ten właśnie adres wywołania, z tym że jedna z nich jeśli będzie to żądanie POST, dwie pozostałe GET – ale jedna tylko jeśli wystąpi dodatkowy parametr. Nie ma oczywiście problemu by każda metoda mapowała zupełnie osobny adres. Należałoby wtedy usunąć mapowanie na poziomie klasy a dodać parametr value do adnotacji @RequestMapping właściwych metod.

Zacznijmy od przyjrzenia się metodzie viewForm w liniach 33-38. Ponieważ mamy mapowanie na poziomie klasy , w @RequestMapping dla tej metody dodaję tylko metodę wywołania – GET. Tak więc gdy ktoś wywoła adres /formularze/formularz bez żadnego dodatkowego parametru, właśnie ta metoda zostanie wywołana. Do modelu dodaję samochód marki "Skoda". Obiekt ten pod nazwą "samochod" zostaje przekazany do warstwy widoku i tam wyświetlony. Z tego wynika, że jeśli ktoś wywoła adres /formularze/formularz bez parametru, to w jego formularzu pola będą uzupełnione informacjami o naszej przykładowej Skodzie. Jako strona JSP której chcę użyć do wyświetlenia formularza wybrałem plik form.jsp którego nazwę zwracam w linii 37.


Porównajmy tę metodę z metodą viewNewForm z linii 27-31. W związku z mapowaniem na poziomie klasy, metoda ta obsługuje ten sam adres (/formularze/formularz), jednak ponieważ mamy dopisek params="nowy" zostanie ona wywołana tylko wtedy, gdy zostanie przez pasek adresu przekazany parametr o nazwie "nowy". Tak więc w przypadku wywołania adresu "/formularze/formularz" zostanie wywołana poprzednia metoda viewForm, a w przypadku wywołania "/formularze/formularz?nowy" metoda viewNewForm. W pierwszym przypadku do modelu zostaje przekazany obiekt samochodu z uzupełnionymi danymi, w drugim nowy pusty obiekt. Obie metody są obsługiwane przez tę samą stronę JSP.


Do metody postThis wrócimy po omówieniu formularza, ponieważ jest ona wywoływana dopiero po jego zatwierdzeniu. Przyjrzyjmy się teraz zawartości pliku form.jsp obsługującego nasz formularz:




Koniecznie musisz posiadać odwołanie do biblioteki tagów takie jak u mnie w linii 2. Często zdarzało mi się o tym zapominać a potem się dziwić czemu formularz nie działa. Właściwy formularz to linie 11-18. Cały formularz musi zostać objęty tagami <form:form> i </form:form>,

co chyba nie jest zaskakujące dla osób mających styczność z podstawami HTML :) Jak widać w linii 11 formularz obsługuje przesłanie danych metodą POST. Nie ma jednak znacznika "action" ...

Oznacza to że dane z formularza zostaną przesłane pod ten sam adres pod którym się teraz znajdujemy, z tym że wywołanie będzie typu POST. Parametr "modelAttribute" określa nazwę obiektu którego pola będziemy uzupełniać w formularzu. Przyjrzyj się liniom 29 i 36 w kontrolerze. Nazwa obiektu musi się tutaj pokrywać. Wróć teraz na moment i przyjrzyj się polom w klasie Samochód które deklarowałem kilka kroków wcześniej. Teraz spójrz na linie 13-15 niniejszego formularza. Jak widzisz, kolejne pola do wprowadzania danych mają parametr "path" którego wartość pokrywać się musi z nazwami pól obiektu modelowego przekazywanego do i z formularza. Ponadto pola te muszą posiadać gettery i settery aby można się było do nich odwoływać z formularza.


W zależności od tego czy przekazywany obiekt będzie uzupełniony danymi, nasze pola do wprowadzania danych będą uzupełnione lub nie. Wszystko zależy od zawartości obiektu przekazywanego do widoku pod nazwą wskazaną przez "modelAttribute" w linii 11. W linii 17 jest zwyczajny guzik zatwierdzenia formularza.


Przypomnijmy sobie teraz sposób wywołania metod viewForm i viewNewForm, a następnie przyjrzyjmy się obu poniższym ilustracjom:




Porównaj adresy wywołań i zobacz co pojawia się w polach edycyjnych. Teraz już wszystko powinno być jasne ;)


Pozostaje nam obsługa zatwierdzenia formularza. Wróćmy na chwilę do naszego kontrolera:




Do obsługi wywołania POST służy metoda postThis. Obiekt uprzednio przekazany do modelu, a następnie uzupełniony w formularzu a dalej wraca do metody postThis przez parametr. Nazwa tego parametru metody nie musi być zgodna z nazwą w modelAttribute. Zawartość konsoli po zatwierdzeniu formularza: