前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringMVC之细说ModelAndView

SpringMVC之细说ModelAndView

作者头像
一觉睡到小时候
发布2019-07-02 17:10:12
9530
发布2019-07-02 17:10:12
举报
文章被收录于专栏:国产程序员国产程序员

当控制器处理完请求时,通常会将包含视图名称或视图对象以及一些模型属性的ModelAndView对象返回到DispatcherServlet。

因此,经常需要在控制器中构造ModelAndView对象。ModelAndView类提供了几个重载的构造器和一些方便的方法,

让你可以根据自己的喜好来构造ModelAndView对象。这些构造器和方法以类似的方式支持视图名称和视图对象。

当你只有一个模型属性要返回时,可以在构造器中指定该属性来构造ModelAndView对象

代码语言:javascript
复制
@Controller
代码语言:javascript
复制
public class Login {
代码语言:javascript
复制
    @RequestMapping(value="login"
代码语言:javascript
复制
    public ModelAndView login(){
代码语言:javascript
复制
        ModelAndView mav = new ModelAndView();
代码语言:javascript
复制
        mav.setViewName("welcome"); //返回的文件名  
代码语言:javascript
复制
        mav.addObject("message","hello kitty");
代码语言:javascript
复制
        //List  
代码语言:javascript
复制
        List<String> list = new ArrayList<String>();
代码语言:javascript
复制
        list.add("java");
代码语言:javascript
复制
        list.add("c++");
代码语言:javascript
复制
        list.add("oracle");
代码语言:javascript
复制
        mav.addObject("bookList", list);
代码语言:javascript
复制
        //Map  
代码语言:javascript
复制
        Map<String,String> map = new HashMap<String,String>();
代码语言:javascript
复制
        map.put("zhangsan", "北京");
代码语言:javascript
复制
        map.put("lisi", "上海");
代码语言:javascript
复制
        map.put("wangwu", "深圳");
代码语言:javascript
复制
        mav.addObject("map",map);
代码语言:javascript
复制
        return mav;
代码语言:javascript
复制
    }
代码语言:javascript
复制
} 
1、使用ModelAndView作为返回值,首先在方法头中进行声明:

public ModelAndView getNameById(HttpServletRequestrequest,HttpServletResponse response) throws Exception{}

2、然后在方法体中实例化ModelAndView

ModelAndViewmv=this.getAutoView().addObject("object",object);

3、最后在方法中的末尾加上returnmv;

那么mv中的值是什么呢?

ModelAndView: reference to view with name'/officeoa/test/bjqGetNameById.jsp'; model is{bjq=com.hotent.officeoa.model.test.Bjq@1d001c5c[id=10000007960011,name=课本,password=12ab,department=测试3,departmentID=,leader=22222,leaderID=]}

解析:mv中有一个view值和一个model值。

view是我们条转到的页面的地址,model则是页面中会用到的数据

给ModelAndView实例设置view的方法有两个:setViewName(StringviewName) 和 setView(View view)。前者是使用viewName,后者是使用预先构造好的View对象。其中前者比较常用。事实上View是一个接口,而不是一个可以构造的具体类,我们只能通过其他途径来获取View的实例。对于viewName,它既可以是jsp的名字,也可以是tiles定义的名字,取决于使用的ViewNameResolver,而对应如何给ModelAndView实例设置model则比较复杂。有三个方法可以使用: addObject(Object modelObject);

addObject(String modelName, ObjectmodelObject); addAllObjects(Map modelMap);

ModelAndView对象有两个作用: 作用一设置转向地址,如下所示(这也是ModelAndView和ModelMap的主要区别) ModelAndView view = newModelAndView("path:ok"); 作用二用于传递控制方法处理结果数据到结果页面,也就是说我们把需要在结果页面上需要的数据放到ModelAndView对象中即可,他的作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数: addObject(String key,Object value);

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 国产程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档