2013-02-28 82 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是個不錯的選擇。

或者,如果您希望保留原樣的服務器代碼,則可以更改客戶端代碼以創建這些請求參數。可能最簡單的方法是將它們放在查詢字符串中。