java+返回视图_SpringMVC返回数据到视图

通过ModelAndView对象返回数据到视图

在SpringMVC中有一个ModelAndView对象,如其名,Model代表模型,View代表视图,这个名字就很好地解释了该类的作用——它用来存储模型数据以及显示该数据的视图名称。在控制器中调用完模型层处理完用户的请求后,我们可以把结果数据存储在该对象的model属性中,把要返回的视图信息存储在该对象的view属性中,然后让把ModelAndView对象返回给SpringMVC框架。框架则会通过调用Spring配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据传递到指定的视图上,这样我们就可以在视图中获得结果数据并显示出来了。

Spring的配置文件内容如下:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

p:prefix="/WEB-INF/pages/" p:suffix=".jsp"

/>

下例将简单介绍如何使用ModelAndView来存储数据,控制器代码如下:

package org.zero01.test;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.servlet.ModelAndView;

@Controller

public class Test {

@RequestMapping("/test.do")

// SpringMVC会自动把 ModelAndView 对象传递到方法参数上

public ModelAndView testModelAndView(ModelAndView modelAndView){

// 设置视图名称

modelAndView.setViewName("index");

// 添加数据

modelAndView.addObject("name","Jon");

modelAndView.addObject("age","15");

modelAndView.addObject("address","USA");

return modelAndView;

}

}

SpringMVC最后会把ModelAndView里的数据拿出来存储到request对象中,所以在视图中我们可以通过EL表达式中直接获取数据,index.jsp内容如下:

Test

name::

${requestScope.name}

age::

${requestScope.age}

address::

${requestScope.address}

浏览器访问结果如下:

aa2b8d52a73cde610c6440d5f7b8be97.png

如果不想在方法上声明ModelAndView参数,也可以自己new一个,并且可以直接在构造器中指定视图名称,示例:

package org.zero01.test;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.servlet.ModelAndView;

@Controller

public class Test {

@RequestMapping("/test.do")

public ModelAndView testModelAndView(){

// 构造器中可以设置视图名称

ModelAndView modelAndView = new ModelAndView("index");

// 添加数据

modelAndView.addObject("name","Jon");

modelAndView.addObject("age","15");

modelAndView.addObject("address","USA");

return modelAndView;

}

}

以上只是使用到了其中一个构造器,ModelAndView总共提供了7个构造器,这些多样的构造器让ModelAndView使用起来更便利。

例如,如果当我们只需要返回一个模型数据时,可以使用以下这个构造器:

public class ModelAndView {

...

public ModelAndView(String viewName, String modelName, Object modelObject) {

this.view = viewName;

this.addObject(modelName, modelObject);

}

...

}

示例:

package org.zero01.test;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.servlet.ModelAndView;

@Controller

public class Test {

@RequestMapping("/test.do")

public ModelAnd

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值