Что такое @Modelattribute весной MVC?
-
26-09-2019 - |
Вопрос
Какова цель и использование @ModelAttribute
Весной MVC?
Решение
@ModelAttribute
Относится к свойству объекта модели (m в MVC;) Итак, скажем, у нас есть форма с объектом Backing Form, который называется «человеком», то вы можете иметь Spring MVC поставлять этот объект к методу контроллера, используя @ModelAttribute
Аннотация:
public String processForm(@ModelAttribute("person") Person person){
person.getStuff();
}
С другой стороны, аннотация используется для определения объектов, которые должны быть частью модели. Поэтому, если вы хотите иметь объект человека, на который ссылаются на модель, вы можете использовать следующий метод:
@ModelAttribute("person")
public Person getPerson(){
return new Person();
}
Этот аннотированный метод позволит доступом к объекту человека на вашем представлении, поскольку он автоматически добавляется в модели к весне.
Видеть «Использование @Modelattribute».
Другие советы
Я знаю, что это старая нить, но я думал, что я бросаю свою шляпу на ринге и посмотрю, смогу ли я грязной водой немного больше :)
Я нашел свою первоначальную борьбу, чтобы понять @ModelAttribute
Был результатом решения Spring, чтобы объединить несколько аннотаций в одну. Стало яснее, как только я разделил его на несколько небольших аннотаций:
Для параметра аннотации, подумайте о @ModelAttribute
как эквивалент @Autowired + @Qualifier
Т.е. он пытается получить боб с указанным именем от весенней модели. Если названный фасоль не найден, вместо того, чтобы бросать ошибку или возвращение null
, это неявно принимает роль @Bean
Т.е. создать новый экземпляр с использованием конструктора по умолчанию и добавьте боб к модели.
Для метода аннотаций, подумайте о @ModelAttribute
как эквивалент @Bean + @Before
, т.е. это помещает фасоль, построенный по коду пользователя в модели, и он всегда вызывается перед способом обработки запросов.
Ясно, я вижу @ModelAttribute
Как следующее (пожалуйста, не принимайте это буквально !!):
@Bean("person")
@Before
public Person createPerson(){
return new Person();
}
@RequestMapping(...)
public xxx handlePersonRequest( (@Autowired @Qualifier("person") | @Bean("person")) Person person, xxx){
...
}
Как видите, весна приняла правильное решение сделать @ModelAttribute
всеобъемлющая аннотация; Никто не хочет видеть аннотацию Smorgasbord.
Для моего стиля я всегда использую @Modelattribute, чтобы уловить объект от пружинной формы JSP. Например, я проектирующую форму на странице JSP, эта форма существует с помощью командного значения
<form:form commandName="Book" action="" methon="post">
<form:input type="text" path="title"></form:input>
</form:form>
и я поймаю объект на контроллере с следующим кодом
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;
}
}
Как описано в документации весны MVC - @Modelattribute. Аннотация может быть использована на методы или дальше Метод аргументов. Отказ И, конечно, мы можем оба использовать одновременно в одном контроллере.
1. Method Annotation.
@ModelAttribute(“cities”)
public List<String> checkOptions(){
return new Arrays.asList(new[]{“Sofia”,”Pleven","Ruse”});//and so on
}
Целью такого метода - добавить атрибут в модели. Так что в нашем случае Города Ключ будет иметь список new Arras.asList(new[]{“Sofia”,”Pleven","Ruse”})
В качестве значения в модели (вы можете подумать о модели как карты (ключ: значение)). @Modelattribute. Методы в контроллере вызываются раньше @Requestmapping. Методы, в том же контроллере.
Здесь мы хотим добавить к модели общую информацию, которая будет использоваться в форме для отображения пользователю. Например, его можно использовать для заполнения HTML Select:
2. Method аргумент
public String findPerson(@ModelAttriute(value="person") Person person) {
//..Some logic with person
return "person.jsp";
}
@Modelattribute на аргументе метода указывает, что аргумент должен быть получен из модели. Так что в этом случае мы ожидаем, что у нас есть в модели человек объект как ключ, и мы хотим получить его значение и поместить его в аргумент метода Человек человек. Отказ Если такому не существует или (иногда вы ошибаетесь (значение = «перссон»)), то пружина не найдет его в модели и создаст пустой объект человека, используя его по умолчанию. Затем возьмут параметры запроса и попробуйте данные связывать их в объекте человека, используя их имена.
name="Dmitrij"&countries=Lesoto&sponsor.organization="SilkRoad"&authorizedFunds=&authorizedHours=&
Таким образом, у нас есть имя, и он будет связываться с человеком. Немейте использование setname (строковое имя). Таким образом
//..Some logic with person
У нас есть доступ к этому заполненному имени со значением «Димитрий».
Конечно, весна может связывать более сложные объекты, такие как списки, карты, список наборов карт и так далее, но за сценой, это делает передачу данных Magic.
Мы можем одновременно иметь модель аннотированного метода и запросить метод обработчика с @Modelattribute в аргументах. Тогда мы должны объединить правила.
Конечно, у нас есть тонны разных ситуаций - @modelattribute методы также могут быть определены в @controllerAdvice и так далее ...
Я знаю, что я опоздал на вечеринку, но я цитирую так, как говорится: «Лучше опоздать, чем никогда». Итак, давайте увидимся, у каждого есть свои способы объяснить вещи, позвольте мне попытаться суммировать его и простое для вас за несколько шагов с примером; Предположим, у вас есть простая форма, form.jsp
<form:form action="processForm" modelAttribute="student">
First Name : <form:input path="firstName" />
<br><br>
Last Name : <form:input path="lastName" />
<br><br>
<input type="submit" value="submit"/>
</form:form>
path = "firstname" Path = "LASTNAME" Это поля / свойства в студенческом клавише, когда форма называется их GetTers, но когда-то представлены свои зачеты, и их значения устанавливаются в компонентах, указанном в 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-Detail.jsp
<b>Student Information</b>
${student.firstName}
${student.lastName}
Так вернемся к вопросу Что такое @Modelattribute весной MVC? Определение образца из источника для вас,http://www.baeldung.com/spring-mvc-and-te-modelattribute-annotation.То @Modelattribute. Это аннотация, которая связывает параметр метода или значение возвращаемого метода к именованному атрибуту модели, а затем выставляет его на вид веб-представления.
Что на самом деле происходит, это получает все значения вашей формы, которые были представлены им, а затем удерживает их для вас, чтобы связать или назначить их объекту. Работает же, как @Requestparameter. где мы получаем только параметр и назначаем значение некоторое поле. Только разница есть @Modelattribute. Удерживает все данные данных, а не один параметр. Это создает боб для вас, которая удерживает форму, представленные данными, которые будут использоваться разработчиком позже.
Пересматривать все это. Шаг 1: Запрос отправляется и наш метод ShortForm Run и модель, временный боб установлен с именем студента отправляется в форму.themodel.addattribute («студент», новый студент ());
Шаг 2 :Modelattribute = "Студент" Модель подачи формы меняет студента, и теперь он содержит все параметры формы
Шаг 3 :@Modelattribute («студент») студенческий эфирМы привлекли ценности @Modelattribute. и назначить весь боб / объект студентам.
Шаг 4: а затем мы используем его, как мы предлагаем, просто как показывает его на странице и т. Д., как я сделал
Я надеюсь, что это поможет вам понять концепцию. Спасибо
Возьмите любое веб-приложение, будь то Gmail или Facebook или Instagram или любая другая веб-приложение, это все об обмене данных или информации между конечным пользователем и приложением или пользователем UI и задним приложением. Даже в весеннем мире MVC есть два способа обменяться данными:
- от контроллера до пользовательского интерфейса, а также
- от UI к контроллеру.
Что мы заинтересованы здесь, так как данные передаются от UI для контроллера. Это также может быть сделано 2 способами:
- Использование HTML-формы
- Использование параметров запроса.
Использование HTML-формы: рассмотрите следующий сценарий,
Когда мы отправляем данные формы из веб-браузера, мы можем получить доступ к тому, что данные в нашем классе контроллера в качестве объекта. Когда мы отправляем HTML-форму, весенний контейнер делает четыре вещи. Так и будет,
- сначала прочитайте все данные, которые представлены, которые находятся в запросе с использованием request.getParameter. метод.
- Как только он его читает, он преобразует их в соответствующий тип Java, используя integer.paryint., Double.Parsedouble. и все другие методы анализа, которые доступны на основе типа данных данных.
- После анализа он создаст объект класса моделей, который мы создали. Например, в этом сценарии это пользовательская информация, которая отправляется, и мы создаем класс, называемый пользователем, который контейнер создаст объект, и он установит все значения, которые автоматически входят в этот объект.
- Затем он будет передавать этот объект, установив значения для контроллера.
Чтобы получить все это на работу, нам придется следовать определенным шагам.
Нам сначала необходимо определить класс модели, как пользователь, в котором количество полей должно точно соответствовать количеству полей в форме HTML. Кроме того, имена, которые мы используем в форме HTML, должны соответствовать именам, которые мы имеем в классе Java. Эти два очень важны. Имена должны соответствовать, количество полей в форме должно соответствовать количеству полей в классе, который мы создаем. Как только мы сделаем это, контейнер автоматически прочитает данные, которые приходится, создает объект этой модели, устанавливает значения, и она передает его на контроллер. Чтобы прочитать эти значения внутри контроллера, мы используем @Modelattribute. Аннотация на параметрах метода. Когда мы создаем методы в контроллере, мы собираемся использовать @Modelattribute и добавить параметр к нему, который автоматически будет иметь этот объект, заданный контейнером.
Вот пример код для регистрации пользователя:
@RequestMapping(value = "registerUser", method = RequestMethod.POST)
public String registerUser(@ModelAttribute("user") User user, ModelMap model) {
model.addAttribute("user", user);
return "regResult";
}
Надеюсь, что это схематическое объяснение помогло!
Это используется для целей связывания данных весной MVC
. Отказ Позвольте вам иметь JSP, имеющий элемент формы, например,
на
JSP
<form:form action="test-example" method="POST" commandName="testModelAttribute"> </form:form>
(Метод пружинного формы, простой элемент формы также может быть использован)
На стороне контроллера
@RequestMapping(value = "/test-example", method = RequestMethod.POST)
public ModelAndView testExample(@ModelAttribute("testModelAttribute") TestModel testModel, Map<String, Object> map,...) {
}
Теперь, когда вы отправите форму, значения поля формы будут доступны для вас.
Аннотация, которая связывает параметр метода или значение возвращаемого метода к именованному атрибуту модели, воздействующей на вид веб-представления.
public String add(@ModelAttribute("specified") Model model) {
...
}
@Modelattribute можно использовать в качестве аргументов / параметра метода или до декларации метода. Основная цель этой аннотации для привязки параметров запроса или полей формы к объекту модели
@ModelAttribute
создаст атрибут с именем, указанным вами (@ModelAttribute("Testing") Test test) as Testing
В данном примере тест, являющийся тестом бобов, являющийся ссылкой на компонент, и тестирование будет доступно в модели, чтобы вы могли дополнительно использовать его на страницах JSP для поиска значений, которые вы храняте в вас ModelAttribute
.
@ Modelattribute просто связывает значение от полей JSP для POJO Calss для выполнения нашей логики в классе контроллера. Если вы знакомы с Struts, то это похоже на заполнение объекта Formbean при представлении.
Аннотация Modelattribute используется в рамках веб-приложения Spring MVC и может использоваться в двух сценариях.
Прежде всего, его можно использовать для введения данных в модель нагрузки Pre-JSP. Это особенно полезно для обеспечения того, чтобы JSP требуется для отображения всех самих данных. Инъекция получается путем подключения одного метода к модели.
Во-вторых, его можно использовать для чтения данных из существующей модели и назначить его параметрам метода тренера.
преодолевать https://dzone.com/articles/using-spring-mvc%e2%80%99s.