通過JS獲取前臺資料,並向後臺一般處理程式傳遞
阿新 • • 發佈:2018-12-30
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資料寫入資料庫裡.