SpringMVC处理数据输出的实例代码

一、 使用ModelAndVIew处理模型数据

控制器处理方法的返回值如果为ModelAndView, 则其既包含视图信息,也包含模型数据信息。数据是放在请求域中的。

    //使用ModelAndView
    @RequestMapping("/output3")
    public ModelAndView output3(){
        ModelAndView modelAndView = new ModelAndView("success");    //viewName即为跳转页面
        modelAndView.addObject("msg","ModelAndView处理数据");
        return modelAndView;
    }

二、使用Map处理模型数据

可以在方法的参数列表传入Map或者Model或者ModelMap,这些参数里面保存的所有数据都会放在request请求域中,可以在页面中获取这些数据。

@Controller
public class OutputController {

    //使用Map
    @RequestMapping("/output")
    public String output(Map<String, Object> map){
        map.put("msg","输出数据处理");

        return "success";
    }

    //使用Model,一个接口
    @RequestMapping("/output1")
    public String output1(Model model){
        model.addAttribute("msg","model处理数据");

        return "success";
    }

    //使用ModelMap
    @RequestMapping("/output2")
    public String output2(ModelMap modelMap){
        modelMap.addAttribute("msg","modelMap处理数据");

        return "success";
    }
}

实际上Map、Model、ModelMap最终实现都是BindingAwareModelMap,相当于BindingAwareModelMap中保存的数据都会被放在请求域中。

Map是JDK中的一个interface,Model是Spring中的一个interface,而ModelMap是Spring中的一个Class

ModelMap源码中实际上是继承LinkedHashMap类,所以本质上属于Map接口的一个实现类

public class ModelMap extends LinkedHashMap<String, Object>

BindingAwareModelMap源码中继承ExtendedModelMap类,而ExtendedModelMap这个类又继承于ModelMap类,同时实现Model接口。

public class BindingAwareModelMap extends ExtendedModelMap
public class ExtendedModelMap extends ModelMap implements Model

所以Map、Model、ModelMap三者关系如下:

三、使用@SessionAttributes注解处理模型数据

SpringMVC提供了一种可以临时给Session域中保存数据的方式,即使用@SessionAttributes注解,这个注解只能作用在类上。

//给BindingAwareModelMap中保存的数据,同时在session中也保存一份,value指定保存数据时要给session中放的数据的key
//type只要是指定的类型的数据,session就会保存
@SessionAttributes(value = "msg",types = {String.class})
@Controller
public class OutputController

四、使用@ModelAttribute注解处理模型数据

某些业务场景不需要全字段更新,比如修改book对象信息,bookName只读而不能修改,只有其中某写字段的值可以修改。如果让SpringMVC去new一个对象,某些字段会有默认值,将new出来的对象去更新数据库的值,很有可能会发生null值覆盖了原来不能修改的字段的值。

所以,SpringMVC要封装请求参数的Book对象不应该是自己new出来的,而应该是从数据库中取出来的对象,使用这个对象来封装请求参数,这样只是修改了指定的字段值,没有修改的字段值保持原来的值。

@ModelAttribute注解可以加载参数上,也可以加在方法上,如果加在方法上,这个方法就会提前于目标方法运行。也就可以实现提前在数据库查询信息,并保存。在参数上加上注解就可以获取到这个从数据库中取出的对象,而不是去new一个对象出来。

@Controller
public class ModelAttributeTestController {

    private Object o1;
    private Object o2;

    @RequestMapping("/updateBook")
    public String updateBook(@ModelAttribute Book book, ModelMap modelMap){
        o2 = modelMap;
        System.out.println(o1 == o2);   //true

        //参数使用注解,就不会new一个对象,而是使用从数据库中取出的对象
        return "success";
    }

    @ModelAttribute
    public void modelAttr(Map<String, Object> map){
        o1 = map;
        //此方法从数据库中取得数据,并提前于目标方法执行
    }
}

两个方法中的map以及book对象实际上都是同一个BindingAwareModelMap,实现的数据的互通。

总结

到此这篇关于SpringMVC处理数据输出的文章就介绍到这了,更多相关SpringMVC处理数据输出内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 利用springmvc处理模型数据

    springmvc处理模型数据 很多情况下页面上需要很多数据,单单返回页面是不行的,那么springmvc如何将数据返回到该页面呢 springmvc提供了四种方式来输出模型数据 ModelAndView: 处理返回值为ModelAndView时,可以将该对象中添加数据模型 Map及Model:入参为Model.ModelMap或Map时,处理方法返回时,Map中的数据会自动添加到模型中 @SessionAttributes: 将模型中的某个属性暂存到HttpSession中,以便多个请求之间共

  • springmvc处理模型数据Map过程解析

    这篇文章主要介绍了springmvc处理模型数据Map过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 SpringmvcTest.java @RequestMapping("/springmvc") @Controller public class SpringmvcTest { private static final String SUCCESS = "success"; @RequestMapping

  • Springmvc处理ajax请求并返回json数据

    ①在springmvc方法上添加@ResponseBody注解,springmvc会将数据转换成json并返回: @ResponseBody //指定返回json数据,不跳转页面 @RequestMapping("/list") public List<User> list(User user){ System.out.println("获取到异步请求数据:"+user); //todo 根据条件做数据库查询,返回结果集合 ArrayList<Us

  • Spring mvc如何实现数据处理

    处理提交数据 1.提交的域名称和处理方法的参数名一致 提交数据 : http://localhost:8080/hello?name=xiaohua 处理方法 : @RequestMapping("/hello") public String hello(String name){ System.out.println(name); return "hello"; } 后台输出 : xiaohua 2.提交的域名称和处理方法的参数名不一致 提交数据 : http:/

  • Spring MVC数据处理和乱码问题详解

    一.数据处理 1.1 处理提交数据 1.1.1 提交的域名称和处理方法的参数名一致 提交数据:http://localhost:8080/hello?name=test 处理方法: @RequestMapping("/hello") public String hello(String name){ System.out.println(name); return "hello"; } 后台输出test 1.1.2 提交的域名称和处理方法的参数名不一致 提交数据:h

  • springmvc处理响应数据的解析

    1. ModelAndView 相关的成员变量和方法 private Object view; 描述视图信息 private ModelMap model 描述模型数据(响应数据) public void setViewName(String viewName) 设置视图信息 public ModelAndView addObject(String attributeName, Object attributeValue) 设置模型数据 protected Map<String, Object>

  • SpringMVC处理数据输出的实例代码

    一. 使用ModelAndVIew处理模型数据 控制器处理方法的返回值如果为ModelAndView, 则其既包含视图信息,也包含模型数据信息.数据是放在请求域中的. //使用ModelAndView @RequestMapping("/output3") public ModelAndView output3(){ ModelAndView modelAndView = new ModelAndView("success"); //viewName即为跳转页面 m

  • python 把数据 json格式输出的实例代码

    有个要求需要在python的标准输出时候显示json格式数据,如果缩进显示查看数据效果会很好,这里使用json的包会有很多操作 import json date = {u'versions': [{u'status': u'CURRENT', u'id': u'v2.3', u'links': [{u'href': u'http://controller:9292/v2/', u'rel': u'self'}]}, {u'status': u'SUPPORTED', u'id': u'v2.2'

  • C语言输入三角形边长判断其类型并输出面积实例代码

    本文主要研究的是输入三角形边长判断其类型并输出面积,用C语言实现,具体如下. 思路:首先判断所给的三条边是否能够组成三角形,若可以组成三角形,则判断该三角形是什么类型,并求三角形的面积. 相关知识: 三角形是由同一平面内不在同一直线上的三条线段'首尾'顺次连接所组成的封闭图形.常见的三角形按边分有普通三角形(三条边都不相等),等腰三角(腰与底不等的等腰三角形.腰与底相等的等腰三角形即等边三角形) 不等边三角形:不等边三角形,数学定义,指的是三条边都不相等的三角形叫不等边三角形. 等腰三角形:等腰

  • spring整合redis实现数据缓存的实例代码

    数据缓存原因:有些数据比较多,如果每次访问都要进行查询,无疑给数据库带来太大的负担,将一些庞大的查询数据并且更新次数较少的数据存入redis,能为系统的性能带来良好的提升. 业务逻辑思路:登入系统,访问数据时,检查redis是否有缓存,有则直接从redis中提取,没有则从数据库查询出,并存入redis中做缓存. 为什么要用redis做缓存: (1)异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录. (2)支持丰富的数据类型:Redis支持最大多数开发人员已经知道

  • Django中使用jquery的ajax进行数据交互的实例代码

    jquery框架中提供了$.ajax.$.get.$.post方法,用于进行异步交互,由于Django中默认使用CSRF约束,推荐使用$.get 示例:实现省市区的选择 最终实现效果如图: 将jquery文件拷贝到static/js/目录下 打开booktest/views.py文件,定义视图area1,用于显示下拉列表 #提供显示下拉列表的控件,供用户操作 def area1(request): return render(request,'booktest/area1.html') 打开bo

  • jQuery 实现鼠标画框并对框内数据选中的实例代码

    jquery库: jquery -1.10.2.min.js,jQuery UI - v1.12.1. jQuery 代码 不多说了,之间上代码.不懂的地方看注释. <script type="text/javascript"> //鼠标按下时的X Y坐标 var mouseDownX; var mouseDownY; //鼠标按下时移动的X Y 坐标 var mouseMoveX; var mouseMoveY; //移动的状态 var isMove = false; /

  • java 文件大数据Excel下载实例代码

    java 文件大数据Excel下载实例代码 excel可以用xml表示.故可以以此来实现边写边下载文件 package com.tydic.qop.controller; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.I

  • java的Map集合中按value值进行排序输出的实例代码

    java的Map集合中按value值进行排序输出的实例代码 import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.Set; public class Test { public static void main(String[] args) { Map<String ,Integer> map = new Has

  • el表达式 写入bootstrap表格数据页面的实例代码

    el表达式,写入bootstrap表格,简化代码,效果图: 不多说,上干货: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.

  • java编程实现杨辉三角两种输出结果实例代码

    首先展示下结果: 简介: 杨辉三角,是二项式系数在三角形中的一种几何排列.在欧洲,这个表叫做帕斯卡三角形.帕斯卡(1623----1662)是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年.杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的优美结合. 实例代码如下: package com.sxt; import java.util.Arrays; public class KeBen { p

随机推荐