【发布时间】:2014-12-12 16:19:02
【问题描述】:
我正在将应用程序从 ColdFusion 9 迁移到 ColdFusion 11。
在现有代码中有一个变量赋值给false:
<cfset VARIABLES.roleTypeId = false >
然后,再往下,一个函数期望这个变量是数字的:
<cffunction name="rolesForStudy" >
<cfargument name="id" hint="Study Id">
<cfargument name="roleTypeId" default="#VARIABLES.roleTypeId#" type="numeric"/>
</cffunction>
我继承了代码,我不能为最初程序员以这种方式设置它的决定辩护——但简而言之,它在 ColdFusion 9 中工作,但它没有在 ColdFusion 11 中工作(返回数据类型错误)。我假设 ColdFusion 9 会自动将 false 转换为 0。
我的问题:我可以在 ColdFusion 11 中更改配置设置以使其像 ColdFusion 9 那样进行转换吗?或者我是否必须修复此代码以及整个应用程序中可能存在的许多其他类似示例?我和我们的 ColdFusion 管理员都无法在 ColdFusion 管理员界面、ColdFusion 文档或在线中找到任何相关信息。
编辑以回应 cmets 中的 Adam Cameron
我创建了一个包含以下 10 行的文件(仅此而已):
<cfset VARIABLES.roleTypeId = false >
<cfoutput>
<p>#rolesForStudy( 1, VARIABLES.roleTypeId )#</p>
</cfoutput>
<cffunction name="rolesForStudy" >
<cfargument name="id" hint="Study Id">
<cfargument name="roleTypeId" default="#VARIABLES.roleTypeId#" type="numeric"/>
<cfreturn "It worked" >
</cffunction>
当我在 ColdFusion 9 中执行它时,它会显示“It works”字样。
当我在 ColdFusion 11 中执行它时,它返回以下错误消息:
如果将组件名称指定为此参数的类型,则可能无法定义组件的定义文件找到或无法访问。
【问题讨论】:
-
无论您的问题是什么,将 false 转换为数字都不是问题(它会转换为 0 就好了)。这种行为在 ColdFusion 11 中没有改变。你能提供一个适当的重现案例来展示你所看到的吗?还提供确切的错误(从屏幕复制和粘贴)。也可以付费阅读:blog.adamcameron.me/2013/09/…
-
Holy f***(刚刚在这里运行了你更新的代码。我也一样。WTF?!调查它)
标签: coldfusion