0

早上好,我正在使用从 JSP 向 servlet 发送一个 java-script 数组,jQuery.post()但这里的问题是它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);

    }
4

1 回答 1

0

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

然而,

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

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

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

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

于 2013-02-28T04:42:29.057 回答