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