简体   繁体   English

从 jquery 序列化数组发布 jsp servlet 数组

[英]post jsp servlet array from jquery serialize array

my problem i am not get array from jquery post to jspservlet is shows nullpointer exception always.my jsp page code is listed below :我的问题我没有从 jquery post 获取数组到 jspservlet 总是显示空指针异常。我的 jsp 页面代码如下:

<!DOCTYPE html>
<html>
<head>
<script src="JS/jquery-latest.js"></script>
<script>
$(document).ready(function(){
  $("button").click(function(){
      $("p").fadeToggle(3000,function(){
          var fields=new Array();

          fields = $(":input").serializeArray();
          $.post("exampleservlet",{arraydata:fields,mode:"Insert"},
          function(data) {
                alert("Data Loaded: " + data);
          });      
      });
      return false;
  });
});
</script>
</head>
<body>
    <form>
        <input type="text" name="txt_name" />
        <input type="text" name="txt_name1" />
        <input type="text" name="txt_name2" />
        <input type="text" name="txt_name3" />
      <p style="background:blue;color:white;padding:10px;">If you click on me, I will disappear.</p>
        <button>Click me</button>
    </form>   
</body>
</html>

and my jsp servlet java code listed below:和我的jsp servlet java代码如下:

@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String jsresponse="No Message";

       try
        {
        String arrayData[] = request.getParameterValues("arraydata");
        //String data[]=request.getParameterValues("arraydata[]");

        jsresponse = arrayData[0] +" - ";//"This line shows null pointer exception!";

        }
        catch(Exception ex)
        {

        }


        response.setContentType("text/plain");  // Set content type of the response so that jQuery knows what it can expect.
        response.setCharacterEncoding("UTF-8"); // You want world domination, huh?
        response.getWriter().write(jsresponse);
    }

and i am getting null pointer exception on this line我在这一行收到空指针异常

jsresponse = arrayData[0];//"This line shows null pointer exception!";

it's shows error log like below:它显示如下错误日志:

Nov 15, 2012 4:10:03 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [exampleservlet] in context with path [/javaservletwithajax] threw exception
java.lang.NullPointerException
    at com.example.servlets.exampleservlet.doPost(exampleservlet.java:56)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)

any one help with me how to get array from dopost parameter values in jsp servlet!任何人都可以帮助我如何从jsp servlet中的dopost参数值获取数组!

Solved My Problem from kmb385 like below:从 kmb385 解决了我的问题,如下所示:

Changes in jquery jquery的变化

$(document).ready(function(){
  $("button").click(function(){
      $("p").fadeToggle(3000,function(){

           var fields=new Array();
           var values = new Array();

           fields = $(":input").serializeArray();
           $.each(fields, function(index,element){
             values.push(element.value);
           });

          $.post("exampleservlet",{arraydata:values,mode:"Insert"},
          function(data) {
                alert("Data Loaded: " + data);
          });

      });
      return false;
  });
});

Changes in jsp servlet: jsp servlet 的变化:

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String jsresponse="No Message";

   try
    {
    String arrayData[] = request.getParameterValues("arraydata[]");
    //String data[]=request.getParameterValues("arraydata[]");
    jsresponse = arrayData[0] +" - ";//"Test Response!";

    }
    catch(Exception ex)
    {
     jsresponse = ex.toString();               
    }
    response.setContentType("text/plain");  // Set content type of the response so that            jQuery knows what it can expect.
    response.setCharacterEncoding("UTF-8"); // You want world domination, huh?
    response.getWriter().write(jsresponse);
}

it's works cool!它的作品很酷!

There are two issues being encountered.遇到了两个问题。

  1. Brackets must be specified in the String literal used to retrieve the parameter values.必须在用于检索参数值的字符串文字中指定方括号。
  2. An array is not being passed over the wire to the servlet.数组没有通过线路传递到 servlet。

To solve the first issue, change the argument passed to getParameterValues要解决第一个问题,请更改传递给getParameterValues的参数

String arrayData[] = request.getParameterValues("arraydata[]");

To solve the second issue, you must iterate through the objects returned by Jquery's serializeArray method and construct an array of the values.要解决第二个问题,您必须遍历 Jquery 的serializeArray方法返回的对象并构造一个值数组。 The objects returned by serializeArray are in the form {name:val, value: val}. serializeArray返回的对象的形式为 {name:val, value: val}。 Use the following code to create and pass this array:使用以下代码创建并传递此数组:

 var fields=new Array();
   var values = new Array();

   fields = $(":input").serializeArray();
   $.each(fields, function(index,element){
     values.push(element.value);
   });

  $.post("exampleservlet",{arraydata:values,mode:"Insert"},
  function(data) {
        alert("Data Loaded: " + data);
  });

Prior to this change the request you posted looked like this going across the wire:在此更改之前,您发布的请求看起来是这样的:

在此处输入图片说明

After the change it uses a single dimension array, looking like:更改后,它使用一维数组,如下所示:

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM