将javascript数组传递给servlet问题

时间:2013-02-28 01:43:59

标签: javascript servlets jquery-post

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

<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);

    }

1 个答案:

答案 0 :(得分:0)

request.getParameterValues("arrayData")将返回名为“arrayData”的所有HTTP请求参数的字符串数组。参数可以在查询字符串中,也可以在HTTP POST主体中。

然而,

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

不会通过此名称创建任何参数。这就是你在第45行得到一个空指针的原因。

在这种情况下发送到服务器的是JSON字符串。您需要做的是在服务器上解析此字符串。这将意味着(1)从POST正文中获取字符串。 (2)解析它。您可能希望使用第三方JSON解析器。 json-simple是一个很好的。

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