Coldfusion:处理日期字段中的空值

问题描述 投票:0回答:2

我有这张包含各种员工证明的表格,我需要输入日期。有时该日期是未来几个月的日期,有时该日期是未定义的,为空。

每当我尝试将空值传递给 CFC 时,我总是会收到如下错误:

传递给 addEmployee 函数的 CPRADULTEXP 参数不是日期类型。

我的表格代码:

<!--- If null, set a default if not, set the default to database default --->
<cfif not isDefined("certificationsList.cprAdultExp")>
<cfinput type="datefield" required="no" name="cprAdultExp" value="" >
<cfelse>
<cfinput type="datefield" required="no" name="cprAdultExp" value="#dateformat(certificationsList.cprAdultExp, "mm/dd/yyyy")#" >
</cfif>

表格处理器:

<!--- Is the date defined? --->
<cfif len(Trim("form.cprAdultExp"))  EQ 0>
<cfinvokeargument name="cprAdultExp" value="#CreateODBCDate(Form.cprAdultExp)#">
<cfelse>
<cfinvokeargument name="cprAdultExp" value="">
</cfif>    

现在正在传递该空值,数据库设置为处理/接受空值。

我该如何解决?

sql-server-2008 datetime coldfusion coldfusion-8
2个回答
3
投票

您遗漏了最重要的部分 - 实际的 CFC 和执行插入的查询。发生的情况是您的

<cfargument>
标签被输入为“日期”,因此当您传递空字符串时,验证会失败。 (这是我不输入论点的原因之一)。

您需要关闭类型检查或将参数类型更改为“字符串”或“任意”。现在,当您这样做时,您还需要将

<cfqueryparam>
标签(您 are 使用
<cfqueryparam>
,不是吗?!)更改为如下所示:

<cfqueryparam .... null="#not len(trim(arguments.thedate))#" />

这会解决你的问题...


0
投票

对于 Lucee 类型的 CFML,设置是向后兼容的,但应该可以使其更加 OOP 以允许配置中为 null。 对于函数参数以及我们使用结构体来说,从数据库字段 null 到空字符串的转换非常烦人。 如果我们将数据插入数据库,我们必须在查询参数中使用 null=="" 。

© www.soinside.com 2019 - 2024. All rights reserved.