2016-11-30 20 views
0

$ .postメソッドを使用してhtmlファイルからフォームデータを送信しようとしています。しかし、サーバー側では、サーブレットがnullになっています。フィールドは空でNULLではありません。誰が私に問題点を教えてもらえますか?ありがとう。ところで、ここには1つのフィールドしか表示されていませんが、実際はフォームに複数のフィールドがあります。ここに私のコードは次のとおりです。サーブレットがフロントエンドからデータを取得していない

HTML

 <form id="reservationsForm" name="reservationsForm" method="post" action="Reservations" 
      class="well form-horizontal" align="left" style="width:865px;border:2px solid #000000;margin:auto;"> 
     <br> 
     <div >        
     <div align="left" class="form-group"> 
      <label class="col-md-2 control-label" style="font-family:sans-serif;color:black"><B>Pickup Date:</B></label> 
      <div class="col-md-4 inputGroupContainer"> 
      <div class="input-group"> 
      <input placeholder="Please select a date" class="form-control" type="text" id="datepicker" style="width: 
     238px;"> 
      </div> 
      </div> 
     </div>     
     <br> 
<td><label align="center" style="font-family:sans-serif;color:black"># of Stops</label></td> 
<select class="form-control selectpicker" id="stops" name="stops" size="1" tabindex="14" width="150px"> 

     <option value="0">No Stop</option> 

     <option value="1">1</option> 

     <option value="2">2</option> 

     <option value="3">3</option> 
    </select> 
    <div align="center"> 
      <input onclick="send()" type="submit" name="submit" value="Send" style="font-weight:600" class="btn btn-primary"> 
    </div> 
    </form> 

JS

var send = function() { 

     var pickUpDate = document.getElementById('datepicker').value; 
     var totalStops = document.getElementById('stops').value; 

     var inputData = {"pickUpDate":pickUpDate, 
          "totalStops":totalStops } 
     $.post('http://localhost:8080/WelcomeLimoUsa/Reservations', inputData, myData, "json"); 

     function myData(data) { 

      } 
    }; 

サーブレット

@WebServlet("/Reservations") 
public class Reservations extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     try { 
      if(request != null) { 
     System.out.println("PickUp Date is: " + 
request.getParameter("pickUpDate")); 
    System.out.println("total Stops is: " + request.getParameter("totalStops")); 


    String pickUpDate = request.getParameter("pickUpDate"); 
    Integer totalStops = Integer.parseInt(request.getParameter("totalStops")); 

      }else{ 
       System.out.println("#############Request is null#########"); 
      } 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
      System.out.println("Exception occured"); 
     } 
    } 

} 

サーバー側のエラー

java.lang.NumberFormatException: null 
    at java.lang.Integer.parseInt(Integer.java:542) 
    at java.lang.Integer.parseInt(Integer.java:615) 
    at com.welcomelimo.controller.Reservations.doPost(Reservations.java:50) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670) 
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2508) 
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2497) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
java.lang.NumberFormatException: null 
    at java.lang.Integer.parseInt(Integer.java:542) 
    at java.lang.Integer.parseInt(Integer.java:615) 
    at com.welcomelimo.controller.Reservations.doPost(Reservations.java:50) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670) 
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2508) 
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2497) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Exception occured 
PickUp Date is: null 
+0

あなたの例外はあなたのコードと一致しません。 javaサーブレットには '' Integer.parseInt''はありません。また、 "pickUpDate"という名前のGET変数またはPOST変数にアクセスしようとしていますが、そのようなことはありません。キーと値のペアではなく、json構造を投稿します。 – f1sh

+0

@ f1sh、私は投稿を更新しました。サーブレットは、私がJSONオブジェクトに "pickUpDate"を含めた$ .post()を使用してフロントエンドから送信するクエリパラメータから "pickUpDate"を取得しています。 – JoeZ

+0

値がサーブレットに到着した場合、何が問題になりますか? – f1sh

答えて

0

クライアント側でデバッグを試してください。 Javascriptで:

var totalStops = document.getElementById('stops').value; 

// look if totalStops contains the expected value 
console.log(totalStops); 

var inputData = {"pickUpDate":pickUpDate, 
          "totalStops":totalStops } 

EDIT1:確認された期待値。

Enumeration<String> names = request.getParameterNames(); 
     while(names.hasMoreElements()) { 
      String name = names.nextElement(); 
      response.getWriter().append(name + "=" + request.getParameter(name) + "<br>"); 
     } 

EDIT2を::サーバはパラメータを受け取らないことを見た後
を使用して、すべてのサーブレットのリクエストパラメータを確認してください。

サーブレットで受け取ったすべてのパラメータを表示することをお勧めします。私はあなたのコードでこれを試して、次のようにします:stops=2<br>submit=Send<br>

フォームは提出されましたが、ajaxはありません。
ajaxコードはデフォルトのsubmitイベントを停止していません。

あなたはonclick="send()"を削除し、ラインだけでも聞かせて:

<input type="submit" name="submit" value="Send" style="font-weight:600" class="btn btn-primary"> 

あなたは、フォームがこの方法ではJavaScriptを提出バインドすることができます。

// when the html document is ready/parsed from browser 
    $(document).ready(function() { 
     // Bind an event handler to the "submit" JavaScript event 
     $("#reservationsForm").submit(send) 
    }); 

をデフォルトイベントがreturn false;を追加提出しないようにするにはあなたのsend()関数の終わりに、Javasriptで:

var send = function(event) { 

    var pickUpDate = document.getElementById('datepicker').value; 
    var totalStops = document.getElementById('stops').value; 

    var inputData = {"pickUpDate":pickUpDate, 
         "totalStops":totalStops } 
    $.post('http://localhost:8080/jee6/FormTestServlet', inputData, myData, "json"); 

    function myData(data) { 

     } 

    // add return false to prevent the default sumbit 
    return false; 
}; 

あなたは私たちが イベントオブジェクトの.preventDefault()を呼び出すことによって、または当社のハンドラからfalseを返すことにより提出するアクションをキャンセルすることができます... jQuery.submit()

のドキュメントで見ることができます。

+0

はい、totalStopsには期待値が含まれています – JoeZ

+0

あなたのコードを追加しましたが、まだ幸運なことにヌル値を取得しました – JoeZ

+0

'response.getWriter()。append()'を 'System.out.println() 'に置き換えて –

関連する問題