2013-02-28 77 views
0

早上好,我从JSP发送一个java脚本数组到servlet使用jQuery.post()但这里的问题是它执行动作时抛出java.lang.NullPointerException at servlets.DeleteServlet.doPost(DeleteServlet.java:45) 这里是java-script方法发送数组到servlet:传递javascript数组到servlet问题

<script type="text/javascript" src="jquery-1.9.1.min.js"></script> 

 var myIdsArray = new Array; 

function getCarId(tableID) { // these methods fills the array with values 
    try { 

     var table = document.getElementById(tableID); 
     var rowCount = table.rows.length; 
     for (var i = 0; i < rowCount; i++) { 
      var row = table.rows[i]; 
      var chkbox = row.cells[0].childNodes[0]; 
      if (null != chkbox && true == chkbox.checked) { 
       if (rowCount <= 2) { 
        alert("Cannot delete all the rows."); 
        break; 
       } 
       myIdsArray.push(table.rows[i].cells[1].innerHTML); 
      } 

     } 
     sendArrayToServer(); 

    } catch (e) { 
     alert(e); 
    } 
} 
     function sendArrayToServer() { 
    alert("Called"); 
    $.post('DeleteServlet', { 
     arrayData : myIdsArray, 
     mode : "insert" 
    }); 

,这里是我的servlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String[] arrayData=request.getParameterValues("arrayData"); 
    PrintWriter out=response.getWriter(); 
    for (String string : arrayData) { // line 45 
     out.println(string); 

    } 
+0

DeleteServlet.java中的第45行在哪里? – 2013-02-28 01:46:09

+0

早上好?这里是22.42!当你在js中使用console.log(myIdsArray)时,你会得到什么? – martriay 2013-02-28 01:46:45

回答

0

request.getParameterValues("arrayData")将返回一个名为“arrayData”的所有HTTP请求参数的String数组。这些参数可以位于查询字符串中,也可以位于HTTP POST正文中。

然而,

$.post('DeleteServlet', { 
     arrayData : myIdsArray, 
     mode : "insert" 
}); 

不会创建此名称的任何参数。这就是为什么你会在第45行得到空指针。

在这种情况下发送到服务器的是JSON字符串。你需要做的是解析服务器上的这个字符串。这将意味着(1)从POST正文获取字符串。 (2)解析它。您可能会想要使用第三方JSON解析器。 json-simple是个不错的选择。

或者,如果您希望保留原样的服务器代码,则可以更改客户端代码以创建这些请求参数。可能最简单的方法是将它们放在查询字符串中。