Spring MVC – binding z dziedziczeniem czyli dynamiczne formularze

Posted on Posted in Java SE, Spring

Cel który chcemy osiągnąć

Czasami tworząc formularz okazuje się że mamy kilka standardowych pól, później mamy pole z wyborem opcji, i w zależności od wybranej opcji mamy różne warianty fragmentu formularza.

Model danych

Dla przykładu rozważmy uzupełnianie formularza do utworzenia użytkownika, który może mieć urządzenie.

Cały model jest dość prosty, do tego tworzymy formularz który w zależności od wybranego wariantu wyświetli dodatkowe pola dla odpowiednich typów urządzeń.

Kontroler i metoda post

Następnie tworzymy kontroler z metodą typu post która przyjmie dane z formularza.

Po uruchomieniu kodu na tym etapie i wysłaniu formularza otrzymamy błąd:

Rozwiązanie problemu

Do działania musimy wskazać jakiego typu powinno być pole device w obiekcie user, można zrobić to wykorzystując adnontację @InitBinder.

W celu wskazania typu po prostu inicjalizujemy pole device odpowiednim obiektem, reszta dzieje się już automatycznie. Minusem jest tutaj sposób zlokalizowania odpowiedniego wywołania metody initBinder ponieważ jest ona wywoływana przy każdym requeście który dotyczy naszego kontrolera, oraz to że obiekt który ma wiele wariantów musi być umieszczony w innym dowolnym obiekcie ponieważ nie możemy podmienić pola target w webDataBinder.

One thought on “Spring MVC – binding z dziedziczeniem czyli dynamiczne formularze

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *