众所周知,在mvc中,数据是在各个层次之间进行流转是一个不争的事实。

而这种流转,也就会面临一些困境,这些困境,是由于数据在不同世界中的表现形式不同而造成的。

    数据在页面上是一个扁平的,不带数据类型的字符串,无论你的数据结构有多复杂,数据类型有多丰富。

到了展示的时候,全都一视同仁的成为字符串在页面上展现出来。

    数据在Java世界中可以表现为丰富的数据结构和数据类型,你可以自行定义你喜欢的类。

在类与类之间进行继承、嵌套。我们通常会把这种模型称之为复杂的对象树。

  Spring MVC 其中一种解决方式,将 Java 世界中复杂的数据结构映射为 Json 进行 view 层的展示和流转。

1. 前端组织数据结构 POST 到后台处理

        var datas = new Object();
var fields = ["致命",连击","连击次","命中","混乱","封印","遗忘","鬼火"];
$("#table").find("tr").each(function(i) {
//这一句保证遍历的行是勾选了的
if($(this).children("#cbox").children("input#operation").prop("checked")){
$(this).find("td").each(function(j) {
if(j>0){
var field = fields[j];
datas[field] = $(this).text();
}
});
}
});

a. 项目采用 Spring MVC 后端交互时都是将数据映射为 Json 给前端处理,或者需要将表格信息组织后成 Json post 给后台处理;

在 Action 方法头添加注解 @ResponseBody ,添加 jackson-core-asl-*.jar jackson-mapper-asl-*.jar

b. JQuery 中,遍历 table 中的 行 和 列,类似于循环嵌套

c. 循环每行,保存这一行中的每一列的数据,组成 Jsonobject 对象,{"致命":"1",连击":"2","连击次":"3","命中":"4","混乱":"5","封印":"6","遗忘":"7","鬼火":"8"}

e. 将每行的 jsonobject 对象保存到 Jsonarray 对象中,类似与

     [{"致命":"1",连击":"2","连击次":"3","命中":"4","混乱":"5","封印":"6","遗忘":"7","鬼火":"8"},
{"致命":"1",连击":"2","连击次":"3","命中":"4","混乱":"5","封印":"6","遗忘":"7","鬼火":"8"}]

g. 因为Js是弱引用语言,没有java 那样强硬的数据类型,上面 Jsonobjec 和 Jsonarray 对象是相对于传递到后台之后,解析所使用到的对象

h. 上面定义的 var fields = ["致命",连击","连击次","命中","混乱","封印","遗忘","鬼火"] 类似与 map 中的 key,而遍历每行中的每一个元素的时候,将对应的 {key:value,}存放到 object 中

i. Java 世界中的 map 可以用 Js 中 object()对象表示, list<map> 可以用 Array[object{}] 对象,突然感觉 js 中 object()对象很牛逼,但是这样比较危险,不安全

2. 定义映射规则,获取业务数据返回前端



a.首先查询数据表得到的数据,需要一个 list 来存储,list 里面的元素是map<string,object>。
b.关于数据库增、删、改、查,根据 javabean 注解增、删、改、查的封装,后面有机会的话在总结。
     List<Map<String,Object>> result = queryer.getlist(select * from school);
d.可以将查询到结果 List<Map<String,Object>>,对应一个标示符 key, 放入map 中,返回到前台展示,顺便加入查询状态。
returnmap.put("school", result);
returnmap.put("success", true);
e.整个页面和后台的交互都是通过 ajax 异步进行
$.ajax({
url : '/service/xxx_object_mapping/xxxx_method_mapping',
type : 'GET',
dataType : 'json',
success : function(data){
if(data.success){
//console.log(JSON2.stringify(data.school));
schoolxx = data.school; //动态生成表格的行,先组织好要设定的属性,比如这里,给每行的学校名称,显示一张照片,给一个点击响应的事件,只要你能在前端组织好的属性,都可以放到这里动态生成
row += '<div class="row-fluid"><ul class="thumbnails">';
$.each(schoolxx, function(index, school){
row += '<li class="span2 font thumbnail" >';
row += '<a href="#" onclick="open(\''+ school.smx + '\',\'' + school.smy+ '\');">';
row += '<img data-holder-rendered="true" src="/style/images/bb1.png" + '"';
row += 'style="height:120x; width:130px;" alt="' + school.name+ '">';
row += '<br>' + school.name + '</a></li>';
});
row += "</ul></div>";
$("#schooleTabody").append($(row));
}else
alert(data.error);
},
error : function(data){
alert(data.error);
}
});

f.通过ajax 访问后台,返回的是 map ,前台 ajax 自动会解析为 jsonarray,

success : function(data)

这一部分是成功后的回调函数,data 是后台返回过来的 map。

g.JQuery $.each 的遍历函数,很好的解决了前台遍数据库返回的 List<Map<String,Object>> 数据类型。

h.list 中含有几个元素,前台动态产生几行,或者是几列,或者是几个便签页.........添加其中的属性,响应事件都可以实现。

i.动态生成的时候需要注意转义字符。

3. 常用转义字符

Spring MVC 前后端 Json 方式交互和处理的更多相关文章

  1. Spring MVC前后端的数据传输

    本篇文章主要介绍了Spring MVC中如何在前后端传输数据. 后端 ➡ 前端 在Spring MVC中这主要通过Model将数据从后端传送到前端,一般的写法为: @RequestMapping(va ...

  2. Spring MVC前后端数据交互总结

    控制器 作为控制器,大体的作用是作为V端的数据接收并且交给M层去处理,然后负责管理V的跳转.SpringMVC的作用不外乎就是如此,主要分为:接收表单或者请求的值,定义过滤器,跳转页面:其实就是ser ...

  3. 1.4(Spring MVC学习笔记)JSON数据交互与RESTful支持

    一.JSON数据交互 1.1JSON简介 JSON(JavaScript Object Notation)是一种数据交换格式. 1.2JSON对象结构 {}代表一个对象,{}中写入数据信息,通常为ke ...

  4. Spring mvc,jQuery和JSON数据交互

    一.实验环境的搭建 1.Spring mvc jar. 导入spring mvc运行所需jar包.导入如下(有多余) 2.json的支持jar 3.加入jQuery. 选用jquery-3.0.0.m ...

  5. 关于使用spring mvc前后端上传数据日期格式

    前端页面传入数据到后台,String,int等等类型都很友好,但是Date类型不能直接上传到服务器.否则会报异常![在这里插入图片描述](https://img-blog.csdnimg.cn/201 ...

  6. 前后端进行数据交互时候 要优先考虑json格式即简直对形式,[{}] 列表形式 等便于操作的数据结构

    前后端进行数据交互时候 要优先考虑json格式即简直对形式,[{}] 列表形式 等便于操作的数据结构

  7. 七:Spring Security 前后端分离登录,非法请求直接返回 JSON

    Spring Security 前后端分离登录,非法请求直接返回 JSON 解决方案 在 Spring Security 中未获认证的请求默认会重定向到登录页,但是在前后端分离的登录中,这个默认行为则 ...

  8. 八个开源的 Spring Boot 前后端分离项目,一定要收藏!

    八个开源的 Spring Boot 前后端分离项目 最近前后端分离已经在慢慢走进各公司的技术栈,不少公司都已经切换到这个技术栈上面了.即使贵司目前没有切换到这个技术栈上面,我们也非常建议大家学习一下前 ...

  9. 基于flask和百度AI接口实现前后端的语音交互

    话不多说,直接怼代码,有不懂的,可以留言 简单的实现,前后端的语音交互. import os from uuid import uuid4 from aip import AipSpeech from ...

随机推荐

  1. EMLS项目推进思考

    解决难度从小到大来看: 一.技术与运营层面1. 到企业级层面需要的技术与运营的支撑________前端推送__________________|________后台支撑系统_________|____ ...

  2. C# 读取在存储过程多结果集

    --SQL Server 测试环境搭建: Create database Test; go USE [Test] GO if OBJECT_ID('Tab','U') is not null drop ...

  3. Java api 入门教程 之 JAVA的包装类

    Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数 ...

  4. LINUX内核笔记:自旋锁

    目录 自旋锁作用与基本使用方法? 在SMP和UP上的不同表现? 自旋锁与上下文 使用spin_lock()后为什么不能睡眠? 强调:锁什么? 参考   1.自旋锁作用与基本使用方法? 与其他锁一样,自 ...

  5. 双核CPU,跑程序会报rcu_sched_state detected stalls on CPUs/tasks 错误

    有一份SDK,之前跑在PPC405EX上没问题。最近换平台,CPU使用了PowerPC的P1020,双核。linux版本也升级到了3.0.48版本。升级之后出现了一个问题:SDK里面的程序跑一段时间之 ...

  6. gFTP的安装与使用

    gFTP是X Window下的一个用Gtk开发的多线程FTP客户端工具,它与Microsoft Windows下运行的CuteFTP等FTP工具极为类似.本文介绍了gFTP的编译.安装.启动及使用方法 ...

  7. Linux 下从头再走 GTK+-3.0 (三)

    之前我们为窗口添加了一个按钮,接下来让这个按钮丰富一点.并给窗口加上图标. 首先创建 example3,c 的源文件. #include <gtk/gtk.h> static void a ...

  8. MMORPG大型游戏设计与开发(part1 of net)

    网络模块的设计,是大型多人在线游戏中比较重要的一部分.我之所以将网络模块放到最前面,是因为许许多多的开发者面对这一块的时候充满了疑惑,而且也觉得很神秘和深奥.这些我们面对到的困难,其实是由于我们对这方 ...

  9. SQL 编程

    用SQL编写程序首先我们要了解SQL的一些编程方法 1.使用变量 变量:是可以存储数据值的对象,可以使用局部变量向SQL语句专递数据. (1)局部变量 T-SQL中,局部变量的名称必须以标记@作为前缀 ...

  10. win10输入法切换快捷键怎么设置

    win10输入法切换快捷键怎么修改?以前都是习惯使用(Ctrl+Shift) 现在新版的Win10默认的是[Shift+Alt]那要怎么把它改回来呢? http://jingyan.baidu.com ...