model与map java_Model、ModelMap和ModelAndView的使用详解

1.前言

最近SSM框架开发web项目,用得比较火热。spring-MVC肯定用过,在请求处理方法可出现和返回的参数类型中,最重要就是Model和ModelAndView了,对于MVC框架,控制器Controller执行业务逻辑,用于产生模型数据Model,而视图View用于渲染模型数据。

使用Model和ModelAndView这两个类在spring的视图解析时作用以及区别。

这两者之间有着很大的区别,具体就表现在Model只是用来传输数据的,并不会进行业务的寻址。ModelAndView 却是可以进行业务寻址的,就是设置对应的要请求的静态文件,这里的静态文件指的是类似jsp的文件。

其次,两者还有一个最大的区别,那就是Model是每一次请求可以自动创建,但是ModelAndView 是需要我们自己去new的。

2.model方法

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

Model 是一个接口, 其实现类为ExtendedModelMap,继承了ModelMap类。

public class ExtendedModelMap extends ModelMap implements Model

1

一般来说,可以用model来接收各种类型的数据,如果使用来接收一组数据List 》》那么这个时候的model实际上是ModelMap。

3.ModelMap方法

ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可,

他的作用类似于request对象的setAttribute方法的作用: 用来在一个请求过程中传递处理的数据。

ModelMap或者Model通过addAttribute方法向页面传递参数.

其中addAttribute方法参数有多种方式:

常用的有:写在java代码中

public ModelMap addAttribute(String attributeName, Object attributeValue){...}

public ModelMap addAttribute(Object attributeValue){...}

public ModelMap addAllAttributes(Collection> attributeValues) {...}

public ModelMap addAllAttributes(Map attributes){...}

1

2

3

4

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

modelmap本身不能设置页面跳转的url地址别名或者物理跳转地址.

那么我们可以通过控制器方法的字符串返回值来设置跳转url地址别名或者物理跳转地址。

4.ModelAndView方法

添加模型数据用addObject;

设置视图setViewName;

ModelAndView 对象有两个作用:

(1). 设置转向地址,这也是ModelAndView和ModelMap的主要区别.设置方式如下所示:

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

1

或者通过setViewName方式:

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

1

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

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

public ModelAndView addObject(Object attributeValue){...}

1

2

在jsp中:也是可以通过el表达式语言attributeName或者C标签库的attributeName或者C标签库的{name } 来获取并展示ModelAndView中的数据。

5.使用示例

(1) Model 或者 ModelMap

Model 和 ModelMap 的实例都是spirng mvc框架来自动创建并作为控制器方法参数传入,用户无需自己创建。

而且需要return 返回指定的页面路径.

在控制层的java代码中写入:

//传值方法一

@RequestMapping("listCategory2")

public String listCategory2(Model model) {

// 接收查询的信息

List cs2= categoryService.list();

// 封装了查询的数据

model.addAttribute("test", cs2);

//重要!!需要给出返回model跳转的路径

return "listCategory2";

}

1

2

3

4

5

6

7

8

9

10

11

然后在jsp页面中写入:

${c.id}${c.name}

1

2

3

4

5

6

7

图示:

java:

jsp:

效果:

数据列表全部获取到!

(2) ModelAndView

ModelAndView的实例是需要我们手动new的,这也是和ModelMap的一个区别。

而且,ModelAndView 可以自己寻址,只需要return 返回其对象即可。

在控制层的java代码中写入:

//传值方法二:使用ModelAndView

//当url处于这个时,由listCategory方法来处理请求

@RequestMapping("listCategory")

public ModelAndView listCategory(){

//创建一个模型视图对象

ModelAndView mav = new ModelAndView();

//获取到查询的数据

List cs= categoryService.list();

// //将数据放置到ModelAndView对象view中,第二个参数可以是任何java类型

mav.addObject("cs", cs);

// 放入jsp路径

mav.setViewName("listCategory");

//返回ModelAndView对象mav

return mav;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

在jsp页面中:

${c.id}${c.name}

1

2

3

4

5

6

7

图示:

jsp:

效果:

数据列表全部获取到!

以上就是两种不同的方式取值传值,从上面我们可以看得出来这两个之间还是有一定的区别的,记住有一个需要返回对象,一个需要返回的是地址路径。

---------------------

作者:csdnzoutao

来源:CSDN

原文:https://blog.csdn.net/itbiggod/article/details/79685610

版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值