ModelMap和ModelAndView的作用

来源:互联网 发布:游戏30fps和60fps 知乎 编辑:程序博客网 时间:2024/05/21 11:21

首先介绍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;   



补充:

사용전

    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 클래스 내부로 감춰놓고 사용하고 싶네요.

原创粉丝点击