一、String轉化成JSON對象
String moduleCase = "{\"test\":[{\"module\":\"Example\",\"caseList\":[\"example1\",\"example2\",\"example3\",\"example4\",\"example5\",\"example6\",\"example7\",\"example8\",\"example9\",\"example10\",\"example11\",\"example12\"]},{\"module\":\"NetWorkTest\",\"caseList\":[\"NetWorkTest1\",\"NetWorkTest2\",]},{\"module\":\"PedDukptTest\",\"caseList\":[\"PedDukptTest1\",\"PedDukptTest2\",]},{\"module\":\"PedKeyTest\",\"caseList\":[\"PedKeyTest1\",\"PedKeyTest2\",]},{\"module\":\"PedPinTest\",\"caseList\":[\"PedPinTest1\",\"PedPinTest2\",]},{\"module\":\"PedTest\",\"caseList\":[\"PedTest1\",\"PedTest2\",]},{\"module\":\"PedUtilsTest\",\"caseList\":[\"PedUtilsTest1\",\"PedUtilsTest2\",\"PedUtilsTest3\",\"PedUtilsTest4\",\"PedUtilsTest5\",\"PedUtilsTest6\",\"PedUtilsTest7\",\"PedUtilsTest8\",\"PedUtilsTest9\",\"PedUtilsTest10\",\"PedUtilsTest11\",\"PedUtilsTest12\"]},]}"
;
Module m ;
Case c ;
List caseList = null ;
List mList = new ArrayList() ;
JSONObject json = JSONObject.fromObject(moduleCase); //轉化爲JSON對象
logger.error("" + json.get("test")) ;
JSONArray testJarr = (JSONArray)json.get("test"); //通過JSONObject.get(key)可以得到JSONArray對象
logger.error("" + testJarr.size()) ;
for(int i = 0 ; i < testJarr.size() ; i ++){
JSONObject jobj = (JSONObject)testJarr.get(i) ; //JSONArray.get(index)可以得到JSON Object對象
m = new Module() ;
m.setId(String.valueOf(i));
m.setModuleName(String.valueOf(jobj.get("module")));
JSONArray caseJarr = (JSONArray)jobj.get("caseList") ;
caseList = new ArrayList() ; //清空caseList
for(int j = 0 ; j < caseJarr.size() ; j ++){
c = new Case() ;
c.setId(String.valueOf(j));
c.setCaseName(String.valueOf(caseJarr.get(j)));
caseList.add(c) ;
m.setCaseList(caseList);
}
mList.add(m) ;
}
二、JSON轉化成String對象
moduleList = exeCompiler() ;
JSONArray jsonArray = JSONArray.fromObject(moduleList) ; //首先取得JSONArray對象
String jsonString = jsonArray.toString();
getRequest().setAttribute("jsonString", jsonString) ;
js頁面中獲取:
var testInfo="";
var name = "" ;
var cases = "" ;
var jsonString=<%=request.getAttribute("jsonString") %>; //取得action中傳遞的參數
for(var i = 0 ; i < jsonString.length ; i ++){ //通過循環列表輸出得到JSONArray中的值
name = jsonString[i].moduleName ;
cases = getCases(name) ;
if(cases != ""){
testInfo += "{\"module\":\"" + name +"\",\"caseList\":["+ cases + "]}," ;
}
}
三、在JSP頁面中將object作爲string傳送到後臺
$("#analyResultId").click(function(){
if(check("ids") && scheIsInter("ids")){
$(this).attr('disabled','disabled');
var formData = new FormData(document.getElementById("formId")) ;
$.ajax({ //在編譯器列表文本框處進行編譯
type:"post",
url:"${pageContext.request.contextPath}/manage/termtask!analyResult.action",
data:formData,
processData : false, // 告訴jQuery不要去處理髮送的數據
contentType : false, // 告訴jQuery不要去設置Content-Type請求頭
dataType: "json",
success:function (data){
$(this).removeAttr('disabled') ;
if(data.errorMsg != null){
alert(data.errorMsg) ;
}else{
var jsonStr = JSON.stringify(data) ;
//data爲JSONObject對象,需要將其轉化爲string對象才能作爲request參數傳遞到後臺;否則後臺接收到的是【?dataMap=[object%20Object]】
var url = "${pageContext.request.contextPath}/manage/termtask!showAnalyResult.action?data="+jsonStr ;
showModalOrOpen(url);
}
}
}) ;
}
});
後臺接收:
public String showAnalyResult(){
//此處只能通過getParameter接收,如果想通過getAttribute接收直接得到Object對象,那麼需要在JSP頁面中進行setAttribute處理
String mapStr = getRequest().getParameter("data") ;
Map dataMap = JSONObject.fromObject(mapStr); //可以直接將jsonstring轉化爲map類型,這裏實在很方便;原以爲需要將其裝換爲JSONObject之後再轉換爲java的Map類型
return "showAnalyResult" ;
}
四、在JSP頁面中將string傳遞到後臺後轉化爲Object
原來本想直接在js中將string轉化爲Object對象,然後傳送到action
$(document).ready(function(){
$("#saveAnalyResultExcelId").click(function(){
var jsMap = document.getElementById("dataMapId").value ; //js是後臺dataMap【Map類型】得到的值【String類型】
var dataMap = JSON.parse(jsMap) ; //想轉化爲JSONObject直接傳送到後臺
// dataMap = eval(" + (" + jsMap + ")");
$.ajax({
type:"post",
url:"${pageContext.request.contextPath}/manage/termtask!saveAnalyResultExcel.action",
data:dataMap, //傳送到後臺時總是接收不到值,記得另一篇博文中TaskTemplet對象可以傳送【http://blog.csdn.net/qq_21542377/article/details/77189634】
dataType:"json",
success:function(data){
alert(data) ;
}
});
});
}) ;
action接收:
public class TermtaskAction extends UpDownLoadAction<Termtask> implements
ModelDriven<Termtask>{
public Map<String, Object> dataMap = new HashMap() ;
public String getErrorMsg() {
return errorMsg;
}
public Map getDataMap() {
return dataMap;
}
public void saveAnalyResultExcel() throws Exception{ //dataMap 的值傳遞不進來
for(String key : dataMap.keySet()){
logger.error("key" + key + "-->" + dataMap.get(key));
}
logger.error("dataMap.get(webRltPath) || " + dataMap.get("webRltPath"));
String webRltPath = (String)dataMap.get("webRltPath") ; //取得絕對路徑
File webRlt = new File(webRltPath) ;
downToTer(webRlt) ; //調用父類的方法
}
}
試了很多種可能後決定還是通過string傳送,然後在後臺轉化爲JSONObject接收,效果是一樣的:
$(document).ready(function(){
$("#saveAnalyResultExcelId").click(function(){
var jsMap = document.getElementById("dataMapId").value ;
/* var dataMap = JSON.parse(jsMap) ;
dataMap = eval(" + (" + jsMap + ")"); */
$.ajax({
type:"post",
url:"${pageContext.request.contextPath}/manage/termtask!saveAnalyResultExcel.action",
data:{
jsMap:jsMap
},
dataType:"json",
success:function(data){
alert(data) ;
}
});
});
}) ;
public void saveAnalyResultExcel() throws Exception{
logger.error("jsMap || " + jsMap); //接收string對象
dataMap = JSONObject.fromObject(jsMap) ; //轉化爲JSONObject
for(String key : dataMap.keySet()){
logger.error("key" + key + "-->" + dataMap.get(key));
}
logger.error("dataMap.get(webRltPath) || " + dataMap.get("webRltPath"));
String webRltPath = (String)dataMap.get("webRltPath") ; //取得絕對路徑
File webRlt = new File(webRltPath) ;
downToTer(webRlt) ; //調用父類的方法
}