Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 将表单日期值设置为可选_Jquery_Spring_Forms_Datatable_Momentjs - Fatal编程技术网

Jquery 将表单日期值设置为可选

Jquery 将表单日期值设置为可选,jquery,spring,forms,datatable,momentjs,Jquery,Spring,Forms,Datatable,Momentjs,在我的应用程序中,使用jquery数据表显示查询结果。 最后一项任务是在表单搜索中添加日期字段,但该值对于最终用户和表单的其他用户都是可选的 这是我使用表单数据初始化字段的代码部分: DTevents = $('#eventsdata').DataTable( { "serverSide": true, "ajax":{ url: "../getev

在我的应用程序中,使用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() });
                            }

                       },
如果为空,也接受其他字段;为此,在我的Spring控制器中,我使用了以下代码:

@InitBinder
        public void initBinder(WebDataBinder binder) {
            binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
        }
如您所见,输入到moment.js中的日期将转换为long以传递给控制器。如果我在没有为其他字段插入值的情况下查询应用程序,它将非常有效。在我们的场景中,使用表单中没有值的查询来执行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"

所以我的问题是:我如何告诉我的应用程序date字段也是可选的?

Spring controller会抛出异常,因为他需要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方法,如果您不使用,则必须告知您使用的格式。使用dd/MM/yyyy格式的示例:

请注意,您可以使用直接从矩对象获取自Unix纪元以来的毫秒,而不是将其转换为Date,然后调用getTime。
moment('23/08/2017', "DD/MM/YYYY", true).isValid()