美文网首页Java&JAVA EEjava
Model、ModelMap、ModelAndView

Model、ModelMap、ModelAndView

作者: PC_Repair | 来源:发表于2018-08-16 12:30 被阅读170次
    Model与ModelAndView的最大区别:
    • Model只是用来传输数据的,并不会进行业务的寻址。ModelAndView则可以进行业务寻址,即可以设置对应的要请求的静态文件(jsp等)。
    • Model是每次请求可以自动创建的,而ModelAndView是需要自行new的。
    Model
    • Model是一个接口,其实现类为ExtendedModelMap,继承了ModelMap类。
    public class ExtendedModelMap extends ModelMap implements Model
    

    ModelMap
    • ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可。通过以下方法向页面传递参数:
    public ModelMap addAttribute(String attributeName, Object attributeValue){...}
    public ModelMap addAttribute(Object attributeValue){...}
    public ModelMap addAllAttributes(Collection<?> attributeValues) {...}
    public ModelMap addAllAttributes(Map<String, ?> attributes){...}
    

    在jsp页面上可以通过el表达式语言$attributeName或者是C标签库下的方法,来获取并展示ModelMap中的数据。
    ModelMap本身不能设置页面跳转的url地址别名或者物理跳转地址,那么我们可以通过控制器方法的返回值来设置跳转url地址别名或者物理跳转地址。


    ModelAndView

    ModelAndView 对象有两个作用:
    (1)设置转向地址,这也是ModelAndView和ModelMap的主要区别。设置方式如下所示:

    ModelAndView view = new ModelAndView("path:student");
    

    或者通过setViewName方式:

    public void setViewName(String viewName){...}
    

    (2)将控制器方法中处理的结果数据传递到结果页面,也就是把在结果页面上需要的数据放到ModelAndView对象中即可,其作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数:

    public ModelAndView addObject(String attributeName, Object attributeValue){...}
    public ModelAndView addObject(Object attributeValue){...}
    

    在jsp页面上可以通过el表达式语言$attributeName或者是C标签库下的方法,来获取并展示ModelAndView中的数据。


    使用示例

    Model或者ModelMap

    • Model 和 ModelMap 的实例都是 spring mvc 框架来自动创建并作为控制器方法参数传入,用户无需自己创建。
    • return 需要返回知道的页面路径。
    //控制层java代码
    @RequestMapping("admin_category_list")
        public String list(Model model){
            List<Category> cs = categoryService.list();
            model.addAttribute("cs", cs);
            //服务器跳转到"admin/listCategory"视图
            //“admin/listCategory” 会根据后续的springMVC.xml 配置文件,跳转到 WEB-INF/jsp/admin/listCategory.jsp 文件
            return "admin/listCategory";
        }
    

    注意:如果在控制层上的方法声明了注解@ResponseBody ,则会直接将返回值输出到页面。

    //jsp页面写入
    <!-- 获取值的时候,对应的是addAttribute的第一个参数!取了个别名为c-->
        <c:forEach items="${cs}" var="c">
            <tr>
                <td>${c.id}</td>
                <td>${c.name}</td>
            </tr>
        </c:forEach>
    

    ModelAndView

    • ModelAndView的实例是需要我们手动new的,这也是和ModelMap的一个区别。 而且,ModelAndView 可以自己寻址,只需要return 返回其对象即可。
    //控制层java代码
    @RequestMapping("admin_category_list")
        public ModelAndView list() {
             //创建一个模型视图对象
            ModelAndView mav = new ModelAndView();
            List<Category> cs = categoryService.list();
            mav.addObject("cs", cs);
            mav.setViewName("admin/listCategory");
            return mav;
        }
    
    //jsp页面写入
    <!-- 获取值的时候,对应的是addAttribute的第一个参数!取了个别名为c-->
        <c:forEach items="${cs}" var="c">
            <tr>
                <td>${c.id}</td>
                <td>${c.name}</td>
            </tr>
        </c:forEach>
    

    相关文章

      网友评论

        本文标题:Model、ModelMap、ModelAndView

        本文链接:https://www.haomeiwen.com/subject/rbbnbftx.html