JQuery日期类型,Sybase日期类型发送到CF函数

时间:2012-09-12 18:09:43

标签: jquery sql coldfusion sybase

我有一个Sybase SP,它以日期为唯一参数并返回有关订单的信息。我从CF页面上的JQuery日期选择器获取日期 - 格式化为yy-mm-dd。当没有输入时,SP默认为getDate()。当我在表格上输入日期时,一切正常。当我没有发送日期 - 日期字段留空时 - 我收到一个CF错误,告诉我该参数不是日期类型。我知道SP正在发送日期时间值,但我怎样才能让CF函数识别它?

在SP ......

declare @order_dt datetime 

If @order_dt IS NULL
BEGIN
SELECT @order_dt = getDate()
END

在cfc ...

<cfargument name="order_dt" type="date" required="true" hint="order date to search for" >

 <cfprocparam type="In" cfsqltype="CF_SQL_DATE" dbvarname="@order_dt" value="#order_dt#" null="No">

在.cfm页面上......

<!--JQuery datepicker  -->
<script type="text/javascript">
   $(function() {
           $("#datepicker").datepicker({ dateFormat: "yy-mm-dd" }).val()
   });

表格如下:

<form id="xxxxForm">
<label for="date1">Pick a Date... </label>
<br>
<p><input type="text" id="datepicker" value="" name="date1"></p>
Then choose 'Search'...<br>
<input type="submit" name="submit" value="Search">
<br>
<br>

</form>

如何让CF认识到这是一个很好的价值?如果我将@order_dt声明为日期,我或许在想?

1 个答案:

答案 0 :(得分:2)

> <cfargument name="order_dt" type="date" required="true" 

当您将日期字段留空时,提交的值为空字符串“”。空字符串不是有效的date。这就是CF在你尝试调用函数时抱怨的原因。

如评论中所述,您可以使用required="false"default="#now()#"。但是为了使它按预期工作,当日期留空时,你必须省略参数。如果你向函数传递任何东西,即使是一个空字符串,default也不会启动。但验证会。所以你仍然会得到同样的错误。

另一种选择是将参数类型更改为string。然后验证函数内部。如果提供的值不是有效日期,请将其替换为now()

   <cfargument name="order_dt" type="string" default="">

   <!--- simplistic date validation for illustration --->
   <cfif NOT isDate(arguments.order_dt)>
       <cfset arguments.order_dt = now()>
   </cfif>

或者只是将NULL传递给存储过程

   <cfargument name="order_dt" type="string" default="">
   ...

   <cfprocparam type="In" value="#arguments.order_dt#" 
         null="#not isDate(arguments.order_dt)#" ....>

另一方面,dbvarname暂时被弃用了。在最近的版本中它什么也没做。仅支持位置参数。