栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ModelAndView.addObject与Model.addAttribute

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ModelAndView.addObject与Model.addAttribute

您遇到的情况很少发生。让我们去尝试

@RequestMapping("/edit")  public String editTask(@RequestParam String id, Model model) {    Task task = taskService.getTask(id);    model.addAttribute("task", task);    return "edit";}

在这种情况下,Spring将

Model
根据其创建一个对象
ModelAndViewContainer
,并将其作为参数传递给您的方法。因此,如果您之前添加了模型属性,则可以在此处使用它们,而以后添加的属性也可以使用。您返回一个
String
视图名称。Spring将使用带有String的String
ViewResolver
来解析
jsp
要呈现或转发到的视图或其他类型的视图。

有了这个

@RequestMapping("/edit")  public ModelAndView editTask(@RequestParam String id, @ModelAttribute Task task) {      // Retrieve task from the database    task = taskService.getTask(id);    ModelAndView model = new ModelAndView("edit");    model.addObject("task", task);    return model;}

由于的原因,Spring

@ModelAttribute
将创建一个
Task
对象,并在调用(反射)您的方法时将该对象作为参数传递。在
ModelAndView
您创建对象,添加和回报将与被合并
ModelAndView
对象中包含的
ModelAndViewContainer
由Spring为您的要求进行管理。因此,您在此处添加的内容也将稍后可用。

The hitch: It appears

ModelAttribute
has priority on the model
attributes, so it doesn’t get overwritten by the model attributes you add to
the
ModelAndView
object. Actually it gets written to your
ModelAndView

object, overwriting your
"task"
attribute. Remember that if you don’t
specify a
value
attribute to
@ModelAttribute
annotation, it uses the type
of the argument to give it a name. For example,
Task
==>
"task"
,
List<Task
==>
taskList
, etc.



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/395463.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号