Вопрос

Какова цель и использование @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:

enter image description here

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.

  1. Мы можем одновременно иметь модель аннотированного метода и запросить метод обработчика с @Modelattribute в аргументах. Тогда мы должны объединить правила.

  2. Конечно, у нас есть тонны разных ситуаций - @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 есть два способа обменяться данными:

  1. от контроллера до пользовательского интерфейса, а также
  2. от UI к контроллеру.

Что мы заинтересованы здесь, так как данные передаются от UI для контроллера. Это также может быть сделано 2 способами:

  1. Использование HTML-формы
  2. Использование параметров запроса.

Использование HTML-формы: рассмотрите следующий сценарий,

Form Submission Representation

Когда мы отправляем данные формы из веб-браузера, мы можем получить доступ к тому, что данные в нашем классе контроллера в качестве объекта. Когда мы отправляем HTML-форму, весенний контейнер делает четыре вещи. Так и будет,

  1. сначала прочитайте все данные, которые представлены, которые находятся в запросе с использованием request.getParameter. метод.
  2. Как только он его читает, он преобразует их в соответствующий тип Java, используя integer.paryint., Double.Parsedouble. и все другие методы анализа, которые доступны на основе типа данных данных.
  3. После анализа он создаст объект класса моделей, который мы создали. Например, в этом сценарии это пользовательская информация, которая отправляется, и мы создаем класс, называемый пользователем, который контейнер создаст объект, и он установит все значения, которые автоматически входят в этот объект.
  4. Затем он будет передавать этот объект, установив значения для контроллера.

Чтобы получить все это на работу, нам придется следовать определенным шагам.

Internal working

Нам сначала необходимо определить класс модели, как пользователь, в котором количество полей должно точно соответствовать количеству полей в форме 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 можно использовать в качестве аргументов / параметра метода или до декларации метода. Основная цель этой аннотации для привязки параметров запроса или полей формы к объекту модели

Реф. http://www.javabeat.net/modelattribute-spring-mvc/

@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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top