1. 程式人生 > >通過JS獲取前臺資料,並向後臺一般處理程式傳遞

通過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資料寫入資料庫裡.