通过JS获取前台数据,并向后台一般处理程序传递

function AddTeachCourse() {
//取得教师ID var strTeacherID = $("#hidFieldSaveTeacherID").val(); //alert("教师ID="+txtTeacherID); //取得课程ID var strCourseID = $("#hidFieldSaveCourseID").val(); //alert("课程ID="+txtCourseID); //取得上课班ID var strTeachClassID = document.getElementById("ddlTeachClass"); var TeachClassID = strTeachClassID.options[strTeachClassID.selectedIndex].value; //得到ID //取得课程分配的ID(Indexing) var Indexing = $("#hidFieldSaveIndexing").val(); //取得学生数量 var stuNum = $("#txtStuNum").val(); //取得listbox框ID var listStudent = document.getElementById("lsboxStudent"); //取得listbox框中元素长度 var lstStuLength = listStudent.options.length; // var objJsons=""; // var StuArrayObj = new Array(); //创建一个数组,存储学生ID // StuArrayObj[i] = StudentID; //向数组中添加学生ID //*******************以下是:转换json对象的过程*************************// var StuArrayObjs = []; //定义一个空串 for (var i = 0; i < lstStuLength; i++) { var StudentID = listStudent.options[i].value; //取得学生ID var StuArrayObj = {}; //定义一个空对象,存入数据依次写入空串 StuArrayObj["TeacherID"] = strTeacherID; //教师ID StuArrayObj["CourseID"] = strCourseID; //课程ID StuArrayObj["TeachClassID"] = TeachClassID; //上课班ID StuArrayObj["Indexing"] = Indexing; //课程分配ID StuArrayObj["StuNum"] = stuNum; //学生数量 StuArrayObj["StudentID"] = StudentID; //学生ID StuArrayObjs.push(StuArrayObj); }  var TeachCourseJsonString = JSON.stringify(StuArrayObjs); // JSON.stringify() 转换为json串 // var TeachCourseJson = eval("(" + TeachCourseJsonString + ")"); //转换为json对象 // alert(TeachCourseJson[1].TeacherID); //下面$.getJSON 可以传递成功,只是这样传递不能传递过长字符串 //// $.getJSON("../handler/AddTeachCourse.ashx", { TeachCourseJson: TeachCourseJsonString }, function (data) { //// alert(data); //// }); //与AJAX交互,向一般处理程序传递json字符串数组,并返回结果 $.post("../handler/AddTeachCourse.ashx", { TeachCourseJson: TeachCourseJsonString }, function (data) { alert(data); }); }


注意,如果不用ajax来传递的话. 就拿在mybatis框架里,使用一对多,一个自行车信息主表对应有多个明细表一样.

那么可以定义一个隐藏域:

<input type="hidden" name="al" value="TeachCourseJsonString "/>

需在提交jsp页面到达的action里,定义一个ArrayList集合,而且这个集合属性的名字要跟隐藏域的name一致,也必须是al,才能正常接收到json串哦!


再写一个工具类JsonToListUtils.java,把前台传过来的json字符串(就是充满了数据的一个字符串)转化为单个object对象或者list集合.

项目在struts2里写的,贴代码:

/**
 * 
 */
package com.aowin.utils;

import java.util.ArrayList;
import java.util.Map;

import net.sf.json.JSONArray;

import org.apache.struts2.util.StrutsTypeConverter;

import com.aowin.model.BicycleOrderDetail;
import com.opensymphony.xwork2.conversion.TypeConversionException;

/**
 * @author Li Xiang
 * Description:
 */
public class JsonToListUtils extends StrutsTypeConverter {
	/**
	 * 
	 */
	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		String jsonString = values[0];
		JSONArray jsonArray = JSONArray.fromObject(jsonString);
		ArrayList<BicycleOrderDetail> al = (ArrayList<BicycleOrderDetail>) jsonArray.toList(jsonArray,
				BicycleOrderDetail.class);
		return al;
	}

	/**
	 * 
	 */
	@Override
	public String convertToString(Map context, Object o) {
		ArrayList<BicycleOrderDetail> al = (ArrayList<BicycleOrderDetail>) o;
		JSONArray jsonArray = JSONArray.fromObject(al);
		return jsonArray.toString();
	}

	private ArrayList<BicycleOrderDetail> parseBicycleOrderDetail(String jsonString) throws TypeConversionException {
		JSONArray jsonArray = JSONArray.fromObject(jsonString);
		ArrayList<BicycleOrderDetail> al = (ArrayList<BicycleOrderDetail>) jsonArray.toList(jsonArray,
				BicycleOrderDetail.class);
		return al;
	}
}



利用了
StrutsTypeConverter 

这个Struts2里的父类.接着还需把jsp里的name=al的隐藏域传过来的json串和上面这个转换类匹配到一起.

再来个AddBikesAction-conversion.properties局部声明模式,放在同名action类的同一个包下哦.命名规则:xxxxx-conversion.properties.

然后

al=com.aowin.utils.JsonToListUtils

这样就能用json数据技术配合js,很方便的从前台传过来一个集合list,并将list数据写入数据库里.


原文地址:https://www.cnblogs.com/hangaozu/p/7544438.html