2017-08-23 21 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轉換爲長傳給控制器。如果我查詢應用程序時沒有爲其他字段插入值,它可以很好地工作(在我們的場景中,沒有來自Form的值的查詢用於執行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

注意,您可以使用['的valueOf()'](http://momentjs.com/docs/#/displaying/unix-timestamp-milliseconds/)來獲取毫秒因爲Unix Epoch從一個時刻直接對象而不是將其轉換爲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格式:

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

它完美的作品。謝謝! –