博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ModelMap和ModelAndView的作用(转)
阅读量:4183 次
发布时间:2019-05-26

本文共 2732 字,大约阅读时间需要 9 分钟。

首先介绍ModelMap和ModelAndView的作用

ModelMap
ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可,他的作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数:
addAttribute(String key,Object value); 
在页面上可以通过el变量方式$key或者bboss的一系列获取并展示modelmap中的数据。
modelmap本身不能设置页面跳转的url地址别名或者物理跳转地址,那么我们可以通过控制器方法的返回值来设置跳转url地址别名或者物理跳转地址。 
ModelAndView
ModelAndView对象有两个作用: 
作用一 设置转向地址,如下所示(这也是ModelAndView和ModelMap的主要区别) 
ModelAndView view = new ModelAndView("path:ok"); 
作用二 用于传递控制方法处理结果数据到结果页面,也就是说我们把需要在结果页面上需要的数据放到ModelAndView对象中即可,他的作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数:
addObject(String key,Object value); 
在页面上可以通过el变量方式$key或者bboss的一系列获取并展示ModelAndView中的数据。
作用介绍完了后,接下来介绍使用方法
ModelMap
ModelMap的实例是由bboss mvc框架自动创建并作为控制器方法参数传入,用户无需自己创建。

Java代码   
  1. public String xxxxmethod(String someparam,ModelMap model)   
  2. {   
  3.      //省略方法处理逻辑若干  
  4.       //将数据放置到ModelMap对象model中,第二个参数可以是任何java类型  
  5.       model.addAttribute("key",someparam);   
  6.      ......   
  7.      //返回跳转地址   
  8.       return "path:handleok";   
  9. }  
Java代码  
  1. public String xxxxmethod(String someparam,ModelMap model)  
  2. {  
  3.      //省略方法处理逻辑若干  
  4.       //将数据放置到ModelMap对象model中,第二个参数可以是任何java类型  
  5.       model.addAttribute("key",someparam);  
  6.      ......  
  7.      //返回跳转地址  
  8.       return "path:handleok";  
  9. }  

ModelAndView
ModelAndView的实例是由用户手动创建的,这也是和ModelMap的一个区别。

Java代码   
  1. public ModelAndView xxxxmethod(String someparam)   
  2. {   
  3.      //省略方法处理逻辑若干  
  4.       //构建ModelAndView实例,并设置跳转地址  
  5.       ModelAndView view = new ModelAndView("path:handleok");   
  6.       //将数据放置到ModelAndView对象view中,第二个参数可以是任何java类型  
  7.       view.addObject("key",someparam);   
  8.      ......   
  9.      //返回ModelAndView对象view  
  10.       return view;   
  11. }  

补充:

사용전

    public ModelAndView view(HttpServletRequest request, HttpServletResponse response){
       
 Integer memberId = Integer.parseInt(request.getParameter("memberId"));
        Member member = memberService.get(memberId);
        return new ModelAndView("view").addObject("member", member);
    }
사용후
    public ModelAndView delete(HttpServletRequest request, HttpServletResponse response) throws ServletRequestBindingException{
      
  Integer memberId = ServletRequestUtils.getIntParameter(request, "memberId");
        memberService.delete(memberId);
        return new ModelAndView("redirect:/member/list.html");
    }
형변환 할 때 예외가 발생할 수 있기 때문에 메소드에서 예외를 던지도록 수정합니다.
boolean, float, double, int, long, String 타입으로 받아 올 수 있으며 이 타입들의 배열([]) 타입으로도 바로 바인딩해서 넘겨 받을 수 있습니다. 꽤 편하겠죠?ㅋㅋ
String 쪽에 한가지 추가하고 싶은 API가 있는데...현재는 아래의 모습의 메소드가 있습니다.
static String     getStringParameter(ServletRequest request, String name)
제가 원하는 API는
static String     getStringParameter(ServletRequest request, String name, String encoding)
그래서 아래와 같이 사용할 수 있도록..
String koreanName = ServletRequestUtils.getIntParameter(request, "name", "UTF-8")
지금은 한글을 입력받으려면 복잡한 수를 써야 합니다. 도저히 제 머리로는 외울 수 없는;;;
String name = new String(request.getParameter("name").getBytes("8859_1"), "UTF-8");
이런 코딩을 해줘야 하는데 이런 것을 저 Util 클래스 내부로 감춰놓고 사용하고 싶네요.

转载地址:http://ouyoi.baihongyu.com/

你可能感兴趣的文章
4字节 整数哈希 ----------jenkins 32位Hash算法
查看>>
哈希函数的逆向算法
查看>>
1-3 beanstalkd参数
查看>>
1-4 beanstalkd生产类
查看>>
1-5 beanstalkd消费类
查看>>
1-6 综合案例-生产者消费者
查看>>
织梦cms模板保护技术
查看>>
laravel 课程学习系列二----------------第二章.PHP框架安装之Laravel
查看>>
laravel 课程学习系列三----------------第三章.Artisan控制台
查看>>
git版本控制管理系列-----第四章 GIT基本概念
查看>>
mysql 库级权限、表级权限授权
查看>>
TensorFlow中的单层神经网络
查看>>
在TensorFlow中编程
查看>>
用c实现一个压力测试工具
查看>>
圆周率计算公式
查看>>
排序算法之-选择排序
查看>>
排序算法之-基数排序
查看>>
scikit-learn
查看>>
原生java方法操作SQLite数据库
查看>>
sqlite 数据库驱动框架
查看>>