我有这张包含各种员工证明的表格,我需要输入日期。有时该日期是未来几个月的日期,有时该日期是未定义的,为空。
每当我尝试将空值传递给 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>
现在正在传递该空值,数据库设置为处理/接受空值。
我该如何解决?
您遗漏了最重要的部分 - 实际的 CFC 和执行插入的查询。发生的情况是您的
<cfargument>
标签被输入为“日期”,因此当您传递空字符串时,验证会失败。 (这是我不输入论点的原因之一)。
您需要关闭类型检查或将参数类型更改为“字符串”或“任意”。现在,当您这样做时,您还需要将
<cfqueryparam>
标签(您 are 使用 <cfqueryparam>
,不是吗?!)更改为如下所示:
<cfqueryparam .... null="#not len(trim(arguments.thedate))#" />
这会解决你的问题...
对于 Lucee 类型的 CFML,设置是向后兼容的,但应该可以使其更加 OOP 以允许配置中为 null。 对于函数参数以及我们使用结构体来说,从数据库字段 null 到空字符串的转换非常烦人。 如果我们将数据插入数据库,我们必须在查询参数中使用 null=="" 。