2017-08-23 25 views
0

私のアプリケーションでは、jqueryのデータテーブルを使用してクエリの結果が示されます。 最後のタスクは、フォーム検索に日付フィールドを追加することですが、この値は最終ユーザーにとってはオプションです(フォームの他のものとして)。フォームの日付の値を任意に設定する

これは私は、フォームデータのフィールドを初期化するコードセクションである:空の場合

DTevents = $('#eventsdata').DataTable( 
      { 
       "serverSide": true, 
       "ajax":{ 
          url: "../getevents.json", 
          type: "post", 
          "data": function (d) 
          { 
           return $.extend(d, {typename : $('#typename').val()}, {infoname : $('#infoname').val()}, 
               {hostname : $('#hostname').val()}, {datevalue : moment($('#datevalue').val()).toDate().getTime() }); 
          } 

         }, 

他のフィールドも受け入れられます。

@InitBinder 
     public void initBinder(WebDataBinder binder) { 
      binder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); 
     } 

あなたが見ることができるように、日付がコントローラに渡すために長いに変換するmoment.jsへの入力に与えられている。このため、私の春のコントローラでは、私はこのコードを使用していました。他のフィールドの値を挿入せずにアプリに照会すると、完全に機能します(このフォームでは値のないクエリを使用してSELECT *を実行します)。

しかし、今、私は空の日付を残した場合、私は空のテーブルやコンソールメッセージを得る:

2017-08-23 12:32:44.870 WARN 8396 --- [nio-8080-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to bind request element: org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'long'; nested exception is java.lang.NumberFormatException: For input string: "NaN" 

だから私の質問は:どのように私はまた、「日付」フィールド私のアプリに伝えることができますオプションですか?

+1

注意をなぜなら、Unixエポックは、それを 'toDate()'に変換するのではなく、 'getTime()'を直接呼び出すからです。 – VincenzoC

答えて

1

longの値を期待しているため、スプリングコントローラは例外をスローしますが、値がdatevalueの場合は常に空になります。この場合、モーメント関数getTimestampは、文字列としてNaN(数字ではありません)を返し、コントローラは間違ったタイプのために苦情を申し立てます。

{ 
    var param = {typename : $('#typename').val(), infoname : $('#infoname').val(), hostname : $('#hostname').val() }; 

    if(moment($('#datevalue').val()).isValid()){ 
     param = $.extend(param, {datevalue : moment($('#datevalue').val()).toDate().getTime()}); 
    } 

    return $.extend(d, param); 

} 

ご注意をisValid方法にあなたがstandard iso date formatを使用しない場合は、あなたが使用してフォーマット瞬間を伝える必要があります。ユーザーがそれを挿入していない場合は、パラメータを送信しないようにしてください。例あなたはdd/MM/yyyy形式を使用する場合:あなたはミリ秒を取得するには、[ `のvalueOf()`](http://momentjs.com/docs/#/displaying/unix-timestamp-milliseconds/)を使用することができます

moment('23/08/2017', "DD/MM/YYYY", true).isValid() 
+0

それは完全に動作します。ありがとう! –

関連する問題