Что такое Model в ModelAndView от Spring MVC?
Имея эту основную функцию
protected ModelAndView handleRequestInternal(...) {
...
return new ModelAndView("welcomePage", "WelcomeMessage", message);
}
Я знаю, что это вернет modelandView.
Я знаю, что welcomePage
- это мое имя, поэтому означает, что что-то вроде welcomepage.jsp
будет вызвано.
Но я смущен тем, что является частью модели.
Что такое WelcomeMessage
и message
и как работает модель в этом сценарии?
Ответы
Ответ 1
Модель представляет местозаполнитель для хранения информации, которую вы хотите отобразить на экране. Это может быть строка, которая находится в вашем примере выше, или это может быть объект, содержащий кучу свойств.
Пример 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!
Ответ 2
new ModelAndView("welcomePage", "WelcomeMessage", message);
это сокращение для
ModelAndView mav = new ModelAndView();
mav.setViewName("welcomePage");
mav.addObject("WelcomeMessage", message);
Глядя на код выше, вы можете увидеть имя представления "welcomePage". Ваш ViewResolver
(обычно настроенный в .../WEB-INF/spring-servlet.xml
) переведет это в View. Последняя строка кода устанавливает атрибут вашей модели (addObject("WelcomeMessage", message)
). Это где модель вступает в игру.
Ответ 3
Все это объясняется javadoc для конструктора. Это конструктор удобства, который заполняет модель одной парой атрибут/значение.
Итак...
new ModelAndView(view, name, value);
эквивалентно:
Map model = ...
model.put(name, value);
new ModelAndView(view, model);
Ответ 4
Здесь, в этом случае, у нас есть 3 параметра в методе, а именно ModelandView.
Согласно этому вопросу, первый параметр легко понять из вопроса. Он представляет вид, который будет отображаться клиенту.
Другие два параметра такие же, как указатель и держатель
Следовательно, вы можете подвести итог так
ModelAndView ( Просмотр, Указатель, Держатель );
Указатель просто указывает информацию в держателе
Когда Контроллер связывает Представление с этой информацией, тогда в упомянутом процессе вы можете использовать Указатель на странице JSP для доступа к информации, хранящейся в Держателе, для отображения этой уважаемой информации клиенту.
Вот визуальное изображение уважаемого процесса.
return new ModelAndView("welcomePage", "WelcomeMessage", message);
![enter image description here]()
Ответ 5
Ну, WelcomeMessage - это просто имя переменной для сообщения (фактическая модель с данными). В принципе, вы привязываете модель к приветствуемой странице здесь. Модель (сообщение) будет доступна в welcomePage.jsp как WelcomeMessage.
Вот более простой пример:
ModelAndView("hello","myVar", "Hello World!");
В этом случае моя модель представляет собой простую строку (в приложениях это будет POJO с данными, извлекаемыми для БД или других источников). Я назначаю его myVar, и мой взгляд - hello.jsp. Теперь myVar доступен для меня в hello.jsp, и я могу использовать его для отображения.
В представлении вы можете получить доступ к данным:
${myVar}
Аналогично, вы сможете получить доступ к модели через переменную WelcomeMessage.
Ответ 6
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");
Ответ 7
@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**