0

おはようございます。JSPからサーブレットにjava-script配列を送信していますが、ここでの問題は、アクションが実行されjQuery.post()たときに配列をサーブレットに送信するjava-scriptメソッドがスローされることです。java.lang.NullPointerException at servlets.DeleteServlet.doPost(DeleteServlet.java:45)

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

これが私のサーブレットです:

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リクエストパラメータの文字列配列を返します。パラメータは、クエリ文字列またはHTTPPOST本文のいずれかになります。

でも、

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

この名前でパラメータを作成することはありません。そのため、45行目にnullポインタが表示されます。

この場合、サーバーに送信されるのはJSON文字列です。あなたがする必要があるのは、サーバー上でこの文字列を解析することです。これは、(1)POST本文から文字列を取得することを意味します。(2)解析します。おそらく、サードパーティのJSONパーサーを使用することをお勧めします。json-simpleは良いものです。

または、サーバーコードをそのままにしておきたい場合は、クライアントコードを変更して、これらのリクエストパラメーターを作成できます。おそらく最も簡単なアプローチは、それらをクエリ文字列に配置することです。

于 2013-02-28T04:42:29.057 に答える