在项目上用到了批量删除与批量更改状态,在前台可以获取每条数据的ID,并更改对应信息,但是如何通过数组方式传递给后台?
经过实际操作终于找到可行的方法,写文档做备忘,以便下次使用。
HTML前台代码:
//使用C标签记得导taglib
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
//在后台获取初始值后使用EL表达式和c:foreach循环输出(一个大的foreach循环输出多个信息对象)
forEach items="${order.get(7) }" var="goodslist" varStatus="goodslists">
//使用"name"+索引,动态设置id
type="text" id="name${goodslists.index }" value="${goodslist.value }"/>
forEach>
Ajax前台代码:
<script src="../../js/jquery-2.1.4.js">script>
<script src="../../js/bootstrap.min.js">script>
<script type="text/javascript">
/*ajax提交*/
function saveOrderDetails() {
var JSONObj=new Object();//为JSON对象
/*
*将要修改的数据保存到对象中到后台修改
*/
var show_order_details=new Object();//生成对象(保存单个商品对象)
var id=$('#id').val();//订单号
show_order_details.id=id;//将属性赋值到商品对象中
JSONObj.sod=JSON.stringify(show_order_details);//将对象转成JSON("sod"用于后台定位)
/*
*将多个商品对象保存到集合中到后台修改
*/
var goods_list=[];//生成集合(保存多个商品对象)
var GoodsSize=$('#GoodsSize').val();//获取商品对象的数量
var obj=null;//保存商品对象
//循环将多个商品对象保存到集合中
for (var i = 0; i < GoodsSize; i++) {
obj=new Object();//生成一个商品对象
obj.name=$('#name'+i).val();//保存商品名称
goods_list.push(obj);//保存商品对象到集合中
}
JSONObj.jsonStr=JSON.stringify(goods_list);//将集合转成JSON("jsonStr"用于后台定位)
alert(goods_list); //输出JSON对象
$.ajax({
url:"../../OrderDetailsAjax1.do",
type:"post",
//traditional:true,//阻止深度序列化
data:JSONObj,//将JSONObj作为请求参数传递
dataType:"text",
success : function(data) {
if(data.indexOf("ok")!=-1){
alert("修改完成!");
location.href = "query.jsp";//location.href实现客户端页面的跳转
}else{
alert("修改失败!");
}
}
});
}
script>
后台java代码:
首先先介绍下JSON:
JSON可以有两种格式,一种是对象格式的,另一种是数组对象:
{"name":"JSON","address":"北京市西城区","age":25}//JSON的对象格式的字符串
[{"name":"JSON","address":"北京市西城区","age":25}]//数据对象格式
从上面的两种格式可以看出对象格式和数组对象格式唯一的不同则是在对象格式的基础上加上了[],再来看具体的结构,可以看出都是以键值对的形式出现的,中间以英文状态下的逗号(,)分隔。
在前端和后端进行数据传输的时候这种格式也是很受欢迎的,后端返回json格式的字符串,前台使用js中的JSON.parse()方法把JSON字符串解析为json对象,然后进行遍历,供前端使用。
下面进入正题,介绍在JAVA中JSON和java对象之间的互转。
要想实现JSON和java对象之间的互转,需要借助第三方jar包,有两种jar包可用于实现JSON数据处理:
①:使用”json-lib”的jar包方式处理数据;
jar包下载地址为:https://sourceforge.net/projects/fastjson/?source=directory
在pom.xml中的地址为:
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.9version>
dependency>
后台代码:(获取对象和集合)
@RequestMapping("OrderAjax")
@ResponseBody
//通过request获取到JSON请求参数
public void OrderAjax(HttpServletRequest request) {
//1、使用JSONObject获取订单详情对象(从JSON到对象)
String jsonStr1=request.getParameter("sod");
Show_order_details sod=JSON.parseObject(jsonStr1, new TypeReference() {});
//2、使用JSONArray获取商品详情集合(从JSON到集合)
String jsonStr=request.getParameter("jsonStr");
List jsonArray = JSON.parseArray(jsonStr,Goods.class);
②:使用”fastjson”的jar包方式处理数据;
jar包下载地址为:https://sourceforge.net/projects/json-lib/
在pom.xml中的地址为:
<dependency>
<groupId>net.sf.json-libgroupId>
<artifactId>json-libartifactId>
<version>2.4version>
<classifier>jdk15classifier>
dependency>
后台代码:(获取对象和集合)
@RequestMapping("OrderAjax")
@ResponseBody
//通过request获取到JSON请求参数
public void OrderAjax(HttpServletRequest request) {
//1、使用JSONObject获取商品对象(从JSON到对象)
String jsonStr1=request.getParameter("sod"); //获取请求参数JSON数据
JSONObject jsonObject=JSONObject.fromObject(jsonStr1);//将JSON数据转成JSON
Show_order_details sod=(Show_order_details)JSONObject.toBean(jsonObject, Show_order_details.class);//将JSON转成特殊对象
/*//2、使用JSONArray获取商品对象集合(从JSON到集合)
JSONArray jsonArray=JSONArray.fromObject(jsonStr);
String jsonStr=request.getParameter("jsonStr"); //获取请求参数JSON数据
List jsonArray = JSON.parseArray(jsonStr,Goods.class);//将JSON转成集合
}