Jaki jest cel i zastosowanie @ModelAttribute
w Spring MVC?
java
spring-mvc
modelattribute
Mohammad Adnan
źródło
źródło
Odpowiedzi:
@ModelAttribute
odnosi się do właściwości obiektu Model (M w MVC;), więc powiedzmy, że mamy formularz z obiektem wspierającym formularz o nazwie „Osoba”. Następnie możesz poprosić Spring MVC o dostarczenie tego obiektu do metody Controller za pomocą@ModelAttribute
adnotacji :Z drugiej strony adnotacja służy do definiowania obiektów, które powinny być częścią modelu. Jeśli więc chcesz mieć odwołanie do obiektu Person w modelu, możesz użyć następującej metody:
Ta metoda z adnotacjami umożliwi dostęp do obiektu Person w twoim widoku, ponieważ zostanie on automatycznie dodany do modeli do wiosny.
Zobacz „Korzystanie z @ModelAttribute” .
źródło
@ModelAttribute
w pierwszym przypadku.@ModelAttribute
atrybutów metody?Wiem, że to stara nić, ale pomyślałem, że wrzucam czapkę w pierścień i sprawdzam, czy mogę jeszcze trochę zamoczyć wodę :)
Odkryłem, że moja początkowa trudność w zrozumieniu
@ModelAttribute
była wynikiem decyzji Springa, aby połączyć kilka adnotacji w jedną. Stało się wyraźniejsze, gdy podzielę go na kilka mniejszych adnotacji:W przypadku adnotacji parametrów należy traktować je
@ModelAttribute
jako ekwiwalent,@Autowired + @Qualifier
tzn. Próbuje ono pobrać komponent bean o podanej nazwie z modelu zarządzanego przez Spring. Jeśli nazwana fasola nie zostanie znaleziona, zamiast zgłosić błąd lub zwrócićnull
, domyślnie przyjmuje ona rolę@Bean
np. Utwórz nową instancję za pomocą domyślnego konstruktora i dodaj fasolę do modelu.W przypadku adnotacji metod należy traktować je
@ModelAttribute
jako odpowiednik@Bean + @Before
, tzn. Umieszcza komponent bean skonstruowany przez kod użytkownika w modelu i zawsze jest wywoływany przed metodą obsługi żądania.W przenośni widzę,
@ModelAttribute
co następuje (proszę nie brać tego dosłownie !!):Jak widać, Spring podjął właściwą decyzję, by zrobić
@ModelAttribute
wszechstronną adnotację; nikt nie chce zobaczyć adnotacji smorgasbord.źródło
@Scope("request")
wtedy :)W moim stylu zawsze używam @ModelAttribute do przechwytywania obiektu z pliku źródłowego jsp. na przykład projektuję formularz na stronie jsp, który istnieje z komendą name
i łapię obiekt na kontrolerze za pomocą kodu follow
a każda nazwa pola książki musi być zgodna ze ścieżką w podelementie formy
źródło
catch
Czasownik dokładnie opisuje pracę, która@ModelAttribute
została wykonana. Miły.Spróbuję to wyjaśnić w prostszy sposób. Miejmy:
Jak opisano w dokumentacji Spring MVC - adnotacja @ModelAttribute może być używana w przypadku metod lub argumentów metod . I oczywiście możemy używać obu jednocześnie w jednym kontrolerze.
1.Metoda adnotacji
Celem takiej metody jest dodanie atrybutu do modelu. Zatem w naszym przypadku klucz miast będzie miał listę
new Arras.asList(new[]{“Sofia”,”Pleven","Ruse”})
jako wartość w Modelu (możesz myśleć o Modelu jako mapie (klucz: wartość)). Metody @ModelAttribute w kontrolerze są wywoływane przed metodami @RequestMapping w tym samym kontrolerze.W tym miejscu chcemy dodać do modelu wspólne informacje, które zostaną wykorzystane w formularzu do wyświetlenia użytkownikowi. Na przykład można go użyć do wypełnienia zaznaczenia HTML:
2. Argument metoda
@ModelAttribute w argumencie metody wskazuje, że argument powinien zostać pobrany z modelu. Zatem w tym przypadku oczekujemy, że mamy w obiekcie Model osoby klucz i chcemy uzyskać jego wartość i umieścić go w argumencie metody Person person . Jeśli takie nie istnieje lub (czasami źle wpisujesz (wartość = „persson”)), Spring nie znajdzie go w Modelu i utworzy pusty obiekt Person przy użyciu swoich ustawień domyślnych. Następnie weźmie parametry żądania i spróbuje powiązać je w obiekcie Person przy użyciu ich nazw.
Mamy więc nazwę i zostanie ona przypisana do Person.name przy użyciu setName (nazwa ciągu). Więc w
mamy dostęp do tej wypełnionej nazwy o wartości „Dimitrij”.
Oczywiście Wiosna może wiązać bardziej złożone obiekty, takie jak Listy, Mapy, Listy Zestawów Map i tak dalej, ale za sceną sprawia, że wiązanie danych jest magiczne.
Możemy mieć jednocześnie model z adnotacją metody i procedurę obsługi żądania z @ModelAttribute w argumentach. Następnie musimy ujednolicić zasady.
Oczywiście mamy mnóstwo różnych sytuacji - metody @ModelAttribute można również zdefiniować w @AdrollerAdvice i tak dalej ...
źródło
Wiem, że jestem spóźniony na imprezę, ale zacytuję, jak mówią: „lepiej spóźnij się niż nigdy”. Więc zacznijmy, każdy ma swoje własne sposoby na wyjaśnienie rzeczy, pozwólcie, że spróbuję to podsumować i wyjaśnić w kilku krokach z przykładem; Załóżmy, że masz prosty formularz, form.jsp
path = "firstName" path = "lastName" Są to pola / właściwości w StudentClass, gdy formularz jest wywoływany, wywoływane są ich metody pobierające, ale po przesłaniu wywoływane są ich ustawiacze, a ich wartości są ustawiane w komponencie bean wskazanym w modeluAttribute = „student” w znaczniku formularza.
Mamy StudentController, który obejmuje następujące metody;
teraz w końcu mamy form-details.jsp
Wracając do pytania Co to jest @ModelAttribute w Spring MVC? Definicja próbki ze źródła dla Ciebie, http://www.baeldung.com/spring-mvc-and-the-modelattribute-annotation @ModelAttribute jest adnotacja, że wiąże się to parametr metody lub metoda wartości powrót do określonego atrybutu modelu a następnie udostępnia go do widoku internetowego.
W rzeczywistości dzieje się tak, że pobiera wszystkie wartości formularza, które zostały przez niego przesłane, a następnie przechowuje je, abyś mógł je powiązać lub przypisać do obiektu. Działa tak samo jak @RequestParameter, gdzie otrzymujemy tylko parametr i przypisujemy wartość do jakiegoś pola. Jedyną różnicą jest to, że @ModelAttribute przechowuje wszystkie dane formularza, a nie pojedynczy parametr. Tworzy dla Ciebie fasolę, która przechowuje przesłane dane z formularza do późniejszego wykorzystania przez programistę.
Podsumowując całość. Krok 1: Żądanie jest wysyłane, a nasza metoda showForm działa, a model, ustawiany jest tymczasowy komponent z nazwą studenta przekazywany do formularza. theModel.addAttribute („student”, nowy student ());
Krok 2: modelAttribute = "student" w modelu wysyłania formularza zmienia ucznia i teraz przechowuje wszystkie parametry formularza
Krok 3: @ModelAttribute („student”) Student theStudent Pobieramy wartości przechowywane przez @ModelAttribute i przypisujemy całą fasolę / obiekt Studentowi.
Krok 4: Następnie używamy go podczas licytacji, tak jak pokazujemy go na stronie itp., Tak jak ja
Mam nadzieję, że pomoże ci to zrozumieć tę koncepcję. Dzięki
źródło
Weź dowolną aplikację internetową, bez względu na to, czy jest to Gmail, Facebook, Instagram, czy jakakolwiek inna aplikacja internetowa, chodzi o wymianę danych lub informacji między użytkownikiem końcowym a aplikacją lub interfejsem użytkownika i aplikacją zaplecza. Nawet w świecie Spring MVC istnieją dwa sposoby wymiany danych:
Interesuje nas tutaj sposób, w jaki dane są przekazywane z interfejsu użytkownika do kontrolera. Można to również zrobić na 2 sposoby:
Korzystanie z formularza HTML: Rozważ poniższy scenariusz,
Kiedy przesyłamy dane formularza z przeglądarki internetowej, możemy uzyskać dostęp do tych danych w naszej klasie Controller jako obiekt. Kiedy przesyłamy formularz HTML, Spring Container robi cztery rzeczy. To będzie,
Aby to wszystko zadziałało, będziemy musieli wykonać określone kroki.
Najpierw musimy zdefiniować klasę modelu, na przykład Użytkownik, w której liczba pól powinna dokładnie odpowiadać liczbie pól w formularzu HTML. Ponadto nazwy, których używamy w formularzu HTML, powinny pasować do nazw, które mamy w klasie Java. Te dwa są bardzo ważne. Nazwy powinny pasować, liczba pól w formularzu powinna odpowiadać liczbie pól w klasie, którą tworzymy. Gdy to zrobimy, kontener automatycznie odczyta przychodzące dane, utworzy obiekt tego modelu, ustawi wartości i przekaże je kontrolerowi. Aby odczytać te wartości w kontrolerze, używamy @ModelAttributeadnotacja do parametrów metody. Kiedy tworzymy metody w kontrolerze, użyjemy @ModelAttribute i dodamy do niego parametr, który automatycznie otrzyma ten obiekt z kontenera.
Oto przykładowy kod do rejestracji użytkownika:
Mam nadzieję, że to schematyczne wyjaśnienie pomogło!
źródło
Służy to do celów wiązania danych na wiosnę
MVC
. Niech masz jsp z elementem formularza np<form:form action="test-example" method="POST" commandName="testModelAttribute"> </form:form>
(Metoda Spring Form, można również użyć prostego elementu formularza)
Teraz, kiedy prześlesz formularz, wartości pól formularza będą dostępne.
źródło
Adnotacja, która wiąże parametr metody lub wartość zwracaną przez metodę z atrybutem o nazwie modelu, widocznym dla widoku internetowego.
źródło
@ModelAttribute może być użyty jako argumenty / parametr metody lub przed deklaracją metody. Głównym celem tej adnotacji jest powiązanie parametrów żądania lub pól formularza z obiektem modelu
Nr ref. http://www.javabeat.net/modelattribute-spring-mvc/
źródło
@ModelAttribute
utworzy atrybut o nazwie podanej przez Ciebie(@ModelAttribute("Testing") Test test) as Testing
w podanym przykładzie, Test będący testem komponentu bean będącym odniesieniem do komponentu bean, a Testowanie będzie dostępne w modelu, abyś mógł dalej używać go na stronach jsp do pobierania przechowywanych wartości w tobieModelAttribute
.źródło
@ModelAttribute po prostu wiąże wartość z pól jsp z Pojo calss, aby wykonać naszą logikę w klasie kontrolera. Jeśli znasz rozpórki, jest to jak wypełnianie obiektu formbean po przesłaniu.
źródło
Adnotacja ModelAttribute jest używana jako część aplikacji internetowej Spring MVC i może być używana w dwóch scenariuszach.
Przede wszystkim można go użyć do wstrzyknięcia danych do modelu ładowania przed JSP. Jest to szczególnie przydatne w celu zapewnienia, że do wyświetlenia wszystkich danych wymagany jest plik JSP. Wstrzyknięcie uzyskuje się przez połączenie jednej metody z modelem.
Po drugie, można go użyć do odczytu danych z istniejącego modelu i przypisania go do parametrów metody trenera.
odwołanie https://dzone.com/articles/using-spring-mvc%E2%80%99s
źródło
Na poziomie metody
1. Gdy adnotacja jest używana na poziomie metody, wskazuje, że celem tej metody jest dodanie jednego lub więcej atrybutów modelu
W argumencie metody 1. Gdy jest używany jako argument metody, wskazuje, że argument powinien zostać pobrany z modelu. Gdy nie jest obecny i należy go najpierw utworzyć, a następnie dodać do modelu, a po pojawieniu się w modelu, pola argumentów należy wypełnić wszystkimi parametrami żądania, które mają pasujące nazwy. W ten sposób wiąże dane formularza z komponentem bean.
źródło