Что такое @ModelAttribute в Spring MVC?

Какова цель и использование @ModelAttribute в Spring MVC?

@ModelAttribute ссылается на свойство объекта Model (M в MVC;), так что предположим, что у нас есть форма с объектом поддержки формы, который называется «Person». Затем вы можете использовать Spring MVC для объекта Controller, используя аннотация @ModelAttribute :

 public String processForm(@ModelAttribute("person") Person person){ person.getStuff(); } 

Проверьте здесь пример (Spring 2.5), также см. «Использование атрибута @ModelAttribute в аргументе метода» (Spring 3.1).

С другой стороны, аннотация используется для определения объектов, которые должны быть частью Модели. Поэтому, если вы хотите иметь объект Person, указанный в модели, вы можете использовать следующий метод:

 @ModelAttribute("person") public Person getPerson(){ return new Person(); } 

Этот аннотированный метод позволит получить доступ к объекту Person в вашем представлении, поскольку он автоматически добавляется в Модели по весне.

См. «Использование атрибута @ModelAttribute для метода» (весна 3.1).

Надеюсь, это помогло.

Я знаю, что это старая нить, но я думал, что брошу свою шляпу на ринг и посмотрю, смогу ли я немного загрязнить воду 🙂

Я обнаружил, что моя первоначальная борьба за понимание @ModelAttribute была результатом решения Весны объединить несколько аннотаций в один. Стало яснее, когда я разделил его на несколько меньших аннотаций:

Для аннотаций параметров подумайте о @ModelAttribute как эквивалент @Autowired + @Qualifier то есть он пытается извлечь компонент с заданным именем из модели Spring. Если именованный компонент не найден, вместо того, чтобы бросать ошибку или возвращать null , он неявно принимает на себя роль @Bean т. @Bean Создайте новый экземпляр, используя конструктор по умолчанию, и добавьте компонент в модель.

Для аннотаций метода подумайте о @ModelAttribute как эквиваленте @Bean + @Before , то есть он помещает компонент, созданный кодом пользователя в модели, и он всегда @Bean + @Before перед методом обработки запроса.

Образно, я вижу @ModelAttribute следующим образом (пожалуйста, не воспринимайте это буквально!):

 @Bean("person") @Before public Person createPerson(){ return new Person(); } @RequestMapping(...) public xxx handlePersonRequest( (@Autowired @Qualifier("person") | @Bean("person")) Person person, xxx){ ... } 

Как вы можете видеть, Spring приняла правильное решение сделать @ModelAttribute всеохватывающей аннотацией; никто не хочет видеть аннотацию шведского стола.

Для моего стиля я всегда использую @ModelAttribute, чтобы поймать объект из весенней формы jsp. например, я создаю форму на странице jsp, эта форма существует с commandName

    

и я поймаю объект на controllerе с последующим кодом

 public String controllerPost(@ModelAttribute("Book") Book book) 

и каждое имя поля книги должно соответствовать пути в подэлементе формы

Поэтому я попытаюсь объяснить это проще. Давай:

 public class Person { private String name; public String getName() { return name; } public void setName(final String name) { this.name = name; } } 

Как описано в документации Spring MVC – аннотация @ModelAttribute может использоваться для методов или аргументов метода . И, конечно же, мы можем одновременно использовать оба controllerа.

1.Модельная аннотация

 @ModelAttribute(“cities”) public List checkOptions(){ return new Arras.asList(new[]{“Sofia”,”Pleven","Ruse”});//and so on } 

objective такого метода – добавить атрибут в модель. Таким образом, в нашем случае у городов- ключей будет список new Arras.asList(new[]{“Sofia”,”Pleven","Ruse”}) как значение в Модели (вы можете думать о модели как карте (ключ: значение) ). Методы @ModelAttribute в controllerе вызываются перед методами @RequestMapping внутри одного и того же controllerа.

Здесь мы хотим добавить к общей информации Модели, которая будет использоваться в форме для отображения пользователю. Например, он может использоваться для заполнения выбора HTML:

введите описание изображения здесь

Аргумент 2.Method

 public String findPerson(@ModelAttriute(value="person") Person person) { //..Some logic with person return "person.jsp"; } 

Аргумент @ModelAttribute в аргументе метода указывает, что аргумент должен быть извлечен из модели. Таким образом, в этом случае мы ожидаем, что мы имеем в объекте Model person как ключ, и мы хотим получить его значение и поместить его в аргумент Person человека . Если такого не существует или (иногда вы ошибаетесь (value = “persson”)), то Spring не найдет его в Модели и создаст пустой объект Person, используя его значения по умолчанию. Затем возьмет параметры запроса и попытается привязать их к объекту Person с их именами.

 name="Dmitrij"&countries=Lesoto&sponsor.organization="SilkRoad"&authorizedFunds=&authorizedHours=& 

Таким образом, у нас есть имя, и он будет привязан к Person.name, используя setName (String name). Итак, в

 //..Some logic with person 

у нас есть доступ к этому заполненному имени со значением «Димитрий».

Конечно, Spring может связывать более сложные объекты, такие как списки, карты, список наборов карт и т. Д., Но за сценой он делает магию привязки данных.

  1. Мы можем в то же время моделировать аннотированный метод и обработчик метода запроса с помощью @ModelAttribute в аргументах. Затем мы должны объединить правила.

  2. Конечно, у нас много разных ситуаций – методы @ModelAttribute также могут быть определены в @ControllerAdvice и так далее …

Это используется для привязки данных в Spring MVC . Пусть у вас есть jsp, имеющий в нем элемент формы, например

на JSP

(Метод Spring Form, простой элемент формы также можно использовать)

На стороне controllerа

 @RequestMapping(value = "/test-example", method = RequestMethod.POST) public ModelAndView testExample(@ModelAttribute("testModelAttribute") TestModel testModel, Map map,...) { } 

Теперь, когда вы отправите форму, значения полей формы будут доступны вам.

Я знаю, что опаздываю на вечеринку, но я процитирую, как они говорят, «лучше опаздывать, чем никогда». Так что давайте начнем, у всех есть свои способы объяснить вещи, позвольте мне попытаться подвести итог и просто сделать это за вас несколькими шагами с примером; Предположим, что у вас простая форма, form.jsp

  First Name :  

Last Name :

path = “firstName” path = “lastName” Это поля / свойства в StudentClass, когда форму вызывается, их получатели вызывается, но как только они отправляются, их сеттеры вызываются и их значения устанавливаются в bean-компоненте, указанном в файле modelAttribute = «ученик» в теге формы.

У нас есть StudentController, который включает следующие методы;

 @RequestMapping("/showForm") public String showForm(Model theModel){ //Model is used to pass data between //controllers and views theModel.addAttribute("student", new Student()); //attribute name, value return "form"; } @RequestMapping("/processForm") public String processForm(@ModelAttribute("student") Student theStudent){ System.out.println("theStudent :"+ theStudent.getLastName()); return "form-details"; } //@ModelAttribute("student") Student theStudent //Spring automatically populates the object data with form data all behind the //scenes 

теперь, наконец, у нас есть form-details.jsp

 Student Information ${student.firstName} ${student.lastName} 

Итак, вернемся к вопросу Что такое @ModelAttribute в Spring MVC? Пример определения из источника для вас, http://www.baeldung.com/spring-mvc-and-the-modelattribute-annotation . @ModelAttribute – это аннотация, связывающая параметр метода или метод возвращаемого значения с атрибутом named model а затем выставляет его на веб-представление.

Что на самом деле происходит, так это получение всех значений формы ур, которые они представляют, а затем удерживает их для привязки или назначения их объекту. Он работает так же, как @RequestParameter, где мы получаем только параметр и присваиваем значение некоторому полю. Единственное отличие: @ModelAttribute хранит все данные формы, а не один параметр. Он создает компонент для вас, который хранит данные формы, которые позднее будут использоваться разработчиком.

Напомню все. Шаг 1. Запрос отправляется, и наш метод showForm запускается, а модель, временный компонент, заданный с именем student, пересылается в форму. theModel.addAttribute (“student”, новый Student ());

Шаг 2: modelAttribute = “student” на модели представления формы меняет ученика, и теперь он содержит все параметры формы

Шаг 3: @ModelAttribute («ученик») Студент-студент. Мы извлекаем значения, удерживаемые @ModelAttribute, и назначаем весь объект / объект для ученика.

Шаг 4: И затем мы используем его, как мы ставку, так же, как показать его на странице и т.д., как я сделал

Надеюсь, это поможет вам понять концепцию. благодаря

Аннотации, которые связывают параметр или метод метода, возвращают значение атрибуту named model, отображаемому в веб-представлении.

 public String add(@ModelAttribute("specified") Model model) { ... } 

@ModelAttribute может использоваться как аргумент метода / параметр или перед объявлением метода. Основная цель этой annotations – привязать параметры запроса или поля формы к объекту модели

Ссылка http://www.javabeat.net/modelattribute-spring-mvc/

Аннотирование @ModelAttribute используется как часть веб-приложения Spring MVC и может использоваться в двух сценариях.

Во-первых, он может использоваться для ввода данных объектов модели до загрузки JSP. Это делает его особенно полезным для обеспечения того, что JSP должен отображать все данные. Инъекция достигается путем связывания возвращаемого значения метода с моделью. Во-вторых, его можно использовать для чтения данных из существующей модели, назначающей ее параметрам метода обработчика. Чтобы продемонстрировать @ModelAttributes, я использую простейший из сценариев: добавление учетной записи пользователя в гипотетическую систему, а затем, после создания учетной записи пользователя, отображение информации нового пользователя на экране приветствия.

Чтобы начать катить мяч, мне понадобится простой пользовательский компонент с некоторыми знакомыми полями: имя, фамилия, псевдоним и адрес электронной почты – обычные подозреваемые.

@ModelAttribute просто связывает значение из полей jsp с полями Pojo для выполнения нашей логики в classе controllerа. Если вы знакомы со стойками, это похоже на заполнение объекта formbean при представлении.

@ModelAttribute создаст атрибут с указанным вами (@ModelAttribute("Testing") Test test) as Testing в данном примере. Test, являющийся тестом bean, являющимся ссылкой на bean-компонент, и тестирование будет доступно в модели, чтобы вы можете использовать его на страницах jsp для поиска значений, которые вы сохранили в ModelAttribute .

  • Не удалось открыть ресурс ServletContext
  • Весенний совет АОП по аннотированным controllerам
  • Как использовать атрибуты сеанса в Spring-mvc
  • Как настроить MappingJacksonHttpMessageConverter, используя конфигурацию с пружинной аннотацией?
  • Может ли кто-нибудь объяснить отображение сервлетов?
  • Как создать пользовательский идентификатор, используя hibernate, в то время как он должен быть первичным ключом таблицы
  • log4j: WARN Для журнала в web.xml не найдено никаких добавлений.
  • Развертывание приложения с использованием Hibernate JPA 2.1 для IBM WebSphere дает NullPointerException
  • как установить заголовок без кэша весной mvc 3 по annotations
  • Исключение Strange Jackson, возникающее при сериализации объекта Hibernate
  • Spring Web MVC - проверка отдельных параметров запроса
  • Interesting Posts
    Давайте будем гением компьютера.