Що таке Model у ModelAndView від Spring MVC?


86

Наявність цієї основної функції

protected ModelAndView handleRequestInternal(...) {
    ...
    return new ModelAndView("welcomePage", "WelcomeMessage", message);
}

Я знаю, що це поверне modelandView. Я знаю, що welcomePageце моє прізвище, тому це означає, що щось на зразок welcomepage.jspбуде викликано.

Але я плутаюся з тим, що є частиною моделі. Що таке WelcomeMessageі messageяк модель працює в цьому сценарії?

Відповіді:


114

Модель представляє заповнювач для зберігання інформації, яку ви хочете відобразити у поданні. Це може бути рядок, який наведено у наведеному вище прикладі, або об’єкт, що містить купу властивостей.

Приклад 1

Якщо у вас є...

return new ModelAndView("welcomePage","WelcomeMessage","Welcome!");

... тоді у вашому jsp, щоб відобразити повідомлення, ви зробите: -

Hello Stranger! ${WelcomeMessage} // displays Hello Stranger! Welcome!

Приклад 2

Якщо у вас є...

MyBean bean = new MyBean();
bean.setName("Mike!");
bean.setMessage("Meow!");

return new ModelAndView("welcomePage","model",bean);

... тоді у вашому jsp ви можете зробити: -

Hello ${model.name}! {model.message} // displays Hello Mike! Meow!

4
отже, це означає, що WelcomeMessage - це назва змінної, що використовується в jsp та "Ласкаво просимо!" . Підкажіть, будь ласка, де я можу знайти, що ще може сприймати другий аргумент, тепер я розумію, що для цього потрібні ім'я змінної, назва моделі, чи є щось інше, що воно може прийняти

4
Другий аргумент представляє логічну назву вашої моделі. Ви можете назвати його як завгодно ім'ям, але це ім'я ви будете використовувати при посиланні на свою модель у своєму JSP. У своєму першому прикладі я назвав це WelcomeMessage, у другому прикладі - назвав model. Використовуйте ім’я, яке для вас має сенс. Третій аргумент містить інформацію ... це може бути простий рядок, або POJO, або карта ... в основному будь-яка корисна інформація, яку ви хочете відобразити у поданні.
limc

24
new ModelAndView("welcomePage", "WelcomeMessage", message);

це скорочення для

ModelAndView mav = new ModelAndView();
mav.setViewName("welcomePage");
mav.addObject("WelcomeMessage", message);

Переглядаючи наведений вище код, ви можете побачити назву подання "welcomePage". Ваш ViewResolver(як правило, налаштування в .../WEB-INF/spring-servlet.xml) переведе це у подання. Останній рядок коду встановлює атрибут у вашій моделі ( addObject("WelcomeMessage", message)). Тут модель вступає в гру.


16

Все це пояснюється javadoc для конструктора . Це конструктор зручності, який заповнює модель однією парою атрибут / значення.

Тому ...

   new ModelAndView(view, name, value);

еквівалентно:

   Map model = ...
   model.put(name, value);
   new ModelAndView(view, model);

14

У цьому випадку ми маємо 3 параметра в методі, а саме ModelandView .
Відповідно до цього питання перший параметр легко зрозуміти. Він являє собою вигляд, який буде відображатися клієнту.
Інші два параметри подібні до покажчика та утримувача.
Отже, ви можете підсумувати це так

ModelAndView ( Вид, Вказівник, Власник );

Покажчик просто вказує інформацію у Тримачі

Коли контролер пов'язує View з цією інформацією, то в зазначений процес, ви можете використовувати покажчик на JSP - сторінки для доступу до інформації , що зберігається в Тримач для дисплея, шанованої інформації клієнту.
Ось наочне зображення шанованого процесу.

return new ModelAndView("welcomePage", "WelcomeMessage", message);

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


2

Ну, WelcomeMessage - це просто назва змінної для повідомлення (фактична модель з даними). В основному, ви пов’язуєте модель з привітанням тут. Модель (повідомлення) буде доступна у welcomePage.jsp як WelcomeMessage. Ось простіший приклад:

ModelAndView("hello","myVar", "Hello World!");

У цьому випадку моя модель - це простий рядок (у програмах це буде POJO з даними, отриманими для БД або інших джерел.). Я присвоюю це myVar, і я переглядаю hello.jsp. Тепер myVar доступний для мене в hello.jsp, і я можу використовувати його для відображення.

У поданні ви можете отримати доступ до даних, хоча:

${myVar}

Так само ви зможете отримати доступ до моделі через змінну WelcomeMessage.


0

ModelAndView: сама назва пояснює, що саме структура даних містить дані Model і View.

Map() model=new HashMap(); 
model.put("key.name", "key.value");
new ModelAndView("view.name", model);

// or as follows

ModelAndView mav = new ModelAndView();
mav.setViewName("view.name");
mav.addObject("key.name", "key.value");

якщо модель містить лише одне значення, ми можемо написати так:

ModelAndView("view.name","key.name", "key.value");

0
@RequestMapping(value="/register",method=RequestMethod.POST)
   public ModelAndView postRegisterPage(HttpServletRequest request,HttpServletResponse response,
           @ModelAttribute("bean")RegisterModel bean)
   {
       RegisterService service = new RegisterService();
       boolean b = service.saveUser(bean);

       if(b)
       {
           return new ModelAndView("registerPage","errorMessage","Registered Successfully!");
       }
       else
       {
           return new ModelAndView("registerPage","errorMessage","ERROR!!");
       }
   }



/*  "registerPage" is the .jsp page -> which will viewed.
/* "errorMessage" is the variable that could be displayed in page using -> **${errorMessage}**
/* "Registered Successfully!" or "ERROR!!" is the message will be printed based on **if-else condition**
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.