早上好,我是使用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);
}
答案 0 :(得分:0)
request.getParameterValues("arrayData")
将返回名为“arrayData”的所有HTTP请求参数的字符串数组。参数可以在查询字符串中,也可以在HTTP POST主体中。
然而,
$.post('DeleteServlet', {
arrayData : myIdsArray,
mode : "insert"
});
不会通过此名称创建任何参数。这就是你在第45行得到一个空指针的原因。
在这种情况下发送到服务器的是JSON字符串。您需要做的是在服务器上解析此字符串。这将意味着(1)从POST正文中获取字符串。 (2)解析它。您可能希望使用第三方JSON解析器。 json-simple是一个很好的。
或者,如果您希望保留服务器代码,可以更改客户端代码以创建这些请求参数。可能最简单的方法是将它们放在查询字符串上。