`
AILIKES
  • 浏览: 186276 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ModelAndView使用详解

阅读更多

ModelAndView的构造方法有7个。但是它们都是相通的。这里使用无参构造函数来举例说明如何构造ModelAndView
实例。   
ModelAndView类别就如其名称所示,是代表了MVC Web程序中Model与View的对象,不过它只是方便您一次返回这两个对象的holder,Model与View两者仍是分离的概念。 
最简单的ModelAndView是持有View的名称返回,之后View名称被view resolver,也就是实作org.springframework.web.servlet.View接口的实例解析,例如 InternalResourceView或JstlView等等:

ModelAndView(String viewName)


 如果您要返回Model对象,则可以使用Map来收集这些Model对象,然后设定给ModelAndView,使用下面这个版本的ModelAndView:

ModelAndView(String viewName, Map model)


 Map对象中设定好key与value值,之后可以在视图中取出,如果您只是要返回一个Model对象,则可以使用下面这个ModelAndView版本:

ModelAndView(String viewName, String modelName, Object modelObject)


 藉由modelName,您可以在视图中取出Model并显示。 
 ModelAndView类别提供实作View接口的对象来作View的参数:

ModelAndView(View view)

ModelAndView(View view, Map model)

ModelAndView(View view, String modelName, Object modelObject)


  一个例子是org.springframework.web.servlet.view.RedirectView,ModelAndView预设是使 用forward来转发请求结果至视图,使用RedirectView的话,则会使用redirect将请求重导至视图,例如:

public ModelAndView handleRequest(....) … {

    ....

   

    return new ModelAndView(new RedirectView(this.getViewPage()));

}

....


  在这边,viewPage的地址是从服务器网页根目录开始指定,而不是Web应用程序的根目录,所以您的getViewPage()传回的地址必须像是 /springapp/pages/index.htm这样的地址,其中springapp是您的Web应用程序目录。 
 使用forward的话,网址列上并不会出现被转发的目标地址,而且forward是在Web应用程序之内进行,可以访问Web应用程序的隐藏目录,像是WEB-INF,然而forward只能在Web应用程序中进行,不能指定至其它的Web应用程序地址。 
  使用redirect的话,是要求客户端浏览器重新发出一个指定的请求地址,因此网址列上会出现被重导的目录地址,重导的请求是由浏览器发出,所以不能 访问Web应用程序中的隐藏目录,像是WEB-INF,然而重导是重新要求一个网页,所以可以指定至其它的Web应用程序地址。 
  DispatcherServlet会根据传回的ModelAndView来解析View名称,并处理给予的Model。View名称的解析是委托给实 作org.springframework.web.servlet.ViewResolver接口的实例,ViewResolver接口定义如下:

public interface ViewResolver {

    public view resolveViewName(String, Locale locale) throws ServletException;

}


  ViewResolver的一个实例是InternalResourceViewResolver,名称解析完之后,实际的View绘制与Model转 换处理是交给实作org.springframework.web.servlet.View的实例,View接口如下:

public interface View {

    public void render(Map model, HttpServletResquest resquest, HttpServletResponse response) throws ServletException, IOException;

}


 View的实作之前用过org.springframework.web.servlet.view.InternalResourceView,另外也还有JstlView、TilesView、VelocityView等等的实作,分别进行不同的表现展处理 。




ModelAndView()

    这个构造方法构造出来的ModelAndView 

不能直接使用,应为它没有指定view,也没有绑定对应的model对象。当然,model对象不是必须的,但是view确实必须的。

    用这个构造方法构造的实例主要用来在以后往其中加view设置和model对象。 

    给ModelAndView

实例设置view的方法有两

个:setViewName(String viewName) 和 setView(View view)。前者是使用view

name,后者是使用预先构造好的View对象。其中前者比较常用。事实上View是一个接口,而不是一个可以构造的具体类,我们只能通过其他途径来获取

View的实例。对于view

name,它既可以是jsp的名字,也可以是tiles定义的名字,取决于使用的ViewNameResolver如何理解这个view name。

    如何获取View的实例以后再研究。

而对应如何给ModelAndView

实例设置model则比较复杂。有三个方法可以使用:

addObject(Object modelObject)

addObject(String modelName, Object modelObject)

addAllObjects(Map modelMap)

ModelAndView

可以接收Object类型的对象,ModelAndView

将它视为其众多model中的一个。当使用Object类型的对象的时候,必须指定一个名字。ModelAndView

也可以接收没有明显名字的对象,原因在于ModelAndView

将调用spring自己定义的Conventions 类的.getVariableName()方法来为这个model生成一个名字。显然,对model而言,名字是必须的。

Conventions.getVariableName()生成名字的规则是使用对象的类名的小写模式来作model名字。当这个model是集合或数组的时候,使用集合的第一个元素的类名加s来作model的名字。

ModelAndView

也可以接收Map类型的对象,ModelAndView

将这个Map中的元素视为model,而不是把这个Map本身视为model。但是其他的集合类可以用本身作为model对象。

实际上,ModelAndView

对model的支持来自于类ModelMap,这个类继承自HashMap。

完整的例子

Java代码  收藏代码
public ModelAndView handleRequestInternal(   HttpServletRequest request,   
HttpServletResponse response) throws Exception {       
//实例化一个VIew的ModelAndView实例 
ModelAndView mav = new ModelAndView("hello");  
//添加一个带名的model对象 
mav.addObject("message""Hello World!");  
return mav;           
}  
</span>
分享到:
评论

相关推荐

    SpringMVC ModelAndView的用法使用详解

    SpringMVC ModelAndView的用法使用详解 在SpringMVC框架中,ModelAndView扮演着非常重要的角色,它是SpringMVC在处理用户请求时所使用的核心组件之一。通过本文,我们将详细介绍ModelAndView的用法和使用详解,以便...

    springmvc处理模型数据ModelAndView过程详解

    SpringMVC处理模型数据ModelAndView过程详解 SpringMVC框架提供了多种方式来处理模型数据,包括使用ModelAndView、Map及Model、@SessionAttributes和ModelAttribute等。下面我们将详细介绍SpringMVC处理模型数据...

    ModelAndView详解1

    在本文中,我们将深入探讨ModelAndView的使用方式和它在Spring MVC框架中的作用。 首先,ModelAndView是Spring MVC框架中控制器(Controller)与视图(View)之间的桥梁。它的核心功能在于它可以同时保存处理后的...

    使用SpringMVC的ModelAndView.zip

    2. **ModelAndView详解** `ModelAndView`是SpringMVC中的一个关键类,它在处理请求和返回响应的过程中起到重要作用。`ModelAndView`包含两个主要部分: - **Model**:模型部分,用于存储处理请求时产生的数据。...

    JAVA MVC构架详解

    **JAVA MVC架构详解** 在软件开发领域,Java MVC(Model-View-Controller)架构是一种广泛应用于Web应用的设计模式。它将应用程序的业务逻辑、用户界面和数据管理分离开来,提高了代码的可维护性和可扩展性。以下是...

    SpringMVC 原理及配置详解Demo

    这个“SpringMVC原理及配置详解Demo”旨在深入解析SpringMVC的工作机制和配置过程,帮助开发者更好地理解和应用这一强大的Web开发工具。 **SpringMVC核心组件** 1. **DispatcherServlet**: SpringMVC的前端控制器,...

    java SpringMVC学习使用详解

    返回的`ModelAndView`对象包含了模型数据(model)和视图名(view name),模型数据可以在视图中使用,视图名则用来决定渲染哪个页面。 在处理请求参数时,Spring提供了多种注解,如`@RequestParam`、`@...

    SSM基础jar包+详解

    在这个“SSM基础jar包+详解”中,我们将深入探讨这三个框架的核心组件和它们如何协同工作。 首先,Spring框架是整个SSM的核心,它是一个全面的企业级应用开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等...

    Spring MVC注解式开发使用详解

    Spring MVC 注解式开发使用详解 通过 Spring MVC 注解式开发可以简化开发过程,提高开发效率。下面将详细介绍 Spring MVC 注解式开发的使用方法。 定义处理器 在 Spring MVC 中,处理器是核心组件,负责处理用户...

    SpringMVC+Mysql实例详解

    在这个实例详解中,我们将深入理解SpringMVC的核心概念以及如何与MySQL数据库进行集成。 首先,我们从SpringMVC的基本组件开始。在MVC模式中,“模型”负责处理业务逻辑和数据管理,通常由JavaBeans或实体类表示;...

    SpringMVC之Model接口

    例如,使用 ModelMap 对象可以通过 addObject("key", someparam) 添加数据,而使用 ModelAndView 对象可以通过 addObject("key", someparam) 添加数据。 在实际使用中,ModelMap 和 ModelAndView 对象的使用方式也...

    Spring MVC 框架搭建及详解

    6. `DispatcherServlet` 根据 ModelAndView 中的视图名,通过 ViewResolver 解析出实际的视图。 7. 渲染视图并响应给用户,同时如果有拦截器,则执行后处理方法。 **三、Spring MVC 核心组件** 1. **...

    ssm整合详解

    SSM整合详解 SSM是Java后端开发中常见的三大框架——Spring、Spring MVC和MyBatis的简称。这三个框架的整合使用,可以构建出高效、灵活的企业级应用。下面将详细讲解SSM整合的核心概念、配置过程以及它们如何协同...

    源代码下载 第五章 处理器拦截器详解——跟着开涛学SpringMVC

    - `postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)`: 在目标处理器执行后,但在视图渲染前调用。 - `afterCompletion(HttpServletRequest ...

    freemarker详解

    - **Spring MVC**:Spring框架的MVC模块中,FreeMarker作为视图解析器,通过`ModelAndView`或`Model`将数据传递给模板。 - **Struts2**:Struts2同样支持FreeMarker作为视图技术,通过Action类设置数据模型,...

    搜索功能详解1

    ModelAndView mv = new ModelAndView(); mv.setViewName("user/search"); mv.addObject("user", user); List&lt;Topic&gt; topics2 = new ArrayList(); for (Topic topic : pages) { topic.setUser(userServiceImp....

    SpringMVC Mysql 实例详解

    在这个实例详解中,我们将深入探讨这两者如何协同工作以构建一个功能完善的Web应用。 首先,让我们从`.classpath`文件开始,这是Eclipse或MyEclipse等IDE的工作空间配置文件,它包含了项目所需的库和类路径信息。在...

    Spring StopWatch使用实例详解

    Spring StopWatch 使用实例详解 Spring StopWatch 是 Spring 框架中的一种性能监控工具,主要用于记录和统计应用程序中的执行时间、延迟时间等性能指标。下面是 Spring StopWatch 的使用实例详解。 什么是 Spring ...

Global site tag (gtag.js) - Google Analytics