尝试在servlet中获取数组时获取null

时间:2017-03-22 07:11:55

标签: javascript java jquery servlets

我有一组以下代码来获取数组中的表数据,并通过ajax调用将其传递给servlet。但是我变得无效了。请有人帮我解决我的错误/如何获取所需的数据,因为我是这个servlet和web应用程序的新手。到目前为止,我尝试了SO中给出的一些例子。但我无法得到我的预期数据。

 var myTableArray = [];
        $("table#itemtable tr").each(function() { 
            var arrayOfThisRow = [];
            var tableData = $(this).find('td');
            if (tableData.length > 0) {
                tableData.each(function() { arrayOfThisRow.push($(this).text()); });
                myTableArray.push(arrayOfThisRow);
            }
        });

        alert(myTableArray); 
        $.ajax({
            url:"insertmasteritem",
            type:"POST",
            dataType:'json',
            data: {json:myTableArray},
            success:function(data){
                // codes....
           },
       });

Servlet代码

String[] myJsonData = request.getParameterValues("json[]");
System.out.println("myJsonData.length"+myJsonData.length);

    for (int i = 0; i < myJsonData.length; i++) {

           String[] innerArray=myJsonData[i].split(",");  
           System.out.println(myJsonData[i]);
       }

3 个答案:

答案 0 :(得分:0)

像这样发送您的Json数据

   $.ajax({
            url:"insertmasteritem",
            type:"POST",
            dataType:'json',
            data:myTableArray,
            success:function(data){
                // codes....
           },
   });

和在Servlet类中

JSONObject jsonObj= new JSONObject(request.getParameter("myTableArray"));
Iterator it = jsonObj.keys(); 

while(it.hasNext())
{
  String jsonKey = (String)it.next();
  String jsonValue = jsonObj.getString(jsonKey);
  System.out.println(jsonKey  + " --> " + jsonValue );
}

答案 1 :(得分:0)

好吧,你需要将一个格式正确的JSON对象(作为字符串)发送到servlet。可能最简单的方法是创建一些javascript对象并用这些对象填充数组。然后应该是数组数据 转换为JSON字符串(使用JSON.stringify)。我要硬编码对象值(但你会从你的表中得到它们)

Javascript代码

function generateJson(){
  var myObjArr = [];
//you will typically have just one object (e.g. myObj, which you will fill  in your ajax table loop 
  //myObj.v1 = v1_val;
  //myObj.v2 = v2_val;
  ...
  //myObjArr[i] = myObj; //
  myObj1 = { "v1": "Orange", "v2": "ABC", "v3":10,"v4":"OK"  };
  myObj2 = { "v1": "Apple", "v2": "XYZ", "v3":25,"v4":"OK"  };

  myObjArr[0] = myObj1;
  myObjArr[1] = myObj2;

 var jsonObjStr = JSON.stringify(myObjArr);
 //you can now use jsonObjStr to send your data to the servlet
 // document.getElementById("json").innerHTML = jsonObjStr;//this is just added for testing purposes
 }

生成的JSON

[{"v1":"Orange","v2":"ABC","v3":10,"v4":"OK"},{"v1":"Apple","v2":"XYZ","v3":25,"v4":"OK"}]

如您所见,json字符串以[(表示数组)开头。您可能必须将此更改为以{(和with}}开头,具体取决于JSON解析器的工作方式({}表示对象)。

对于servlet部分,它取决于您正在使用的实际JSON解析器。尝试使用其他人提供的一些建议。我可以使用Jackson提供一些代码,但是您必须将Jackson库添加到类路径中。

答案 2 :(得分:-2)

为什么要将参数值作为JSON []

获取
String[] myJsonData = request.getParameterValues("json[]");