当在任何类型的循环中使用任何类型的条件时,我一直在努力解决最奇怪的错误。
我不断收到的错误是:“复杂对象类型无法转换为简单值。” 在包含<cfloop condition="true">
. 更有趣的是 a<cfbreak>
并没有跳出循环。我已使用 Eclipse 中的调试器来确认此代码是否已实际执行。
奇怪的是,有时代码会永远循环,即使我知道它<cfbreak>
会被执行,有时它会在第一次迭代时出错。
我已确认此问题也发生在另外两台计算机上。
在每个人都对我使用永远为真条件感到抓狂之前,我曾经有一个有效条件:<cfloop condition="not done">
where done 是一个布尔值。这导致了同样的错误。
我正在处理其他人编写的旧代码,因此目前无法选择重写。
我刚刚将 ColdFusion 8.0.1 修补到最新的更新程序 4 以查看是否可以解决问题,但它没有。
这就是代码本质上的样子:
<cfloop condition="true">
<cfif condition is true>
<cfbreak>
</cfif>
</cfloop>
这是执行的代码:
<cfset done = false />
<cfloop condition="true">
<cfscript>
try
{
lineitem.quantity = quantityRemaining;
quantityRemaining = 0;
arrayAppend( currentTub, lineitem );
currentCartItemCount = currentCartItemCount + lineitem.quantity;
currentTubItemCount = currentTubItemCount + lineitem.quantity;
}
catch(Any e){}
availableSpaceInCart = this.itemsPerCart - currentCartItemCount;
availableSpaceInTub = this.itemsPerTub - currentTubItemCount;
</cfscript>
<cfif quantityRemaining LTE 0>
<cfset done = true />
<cfbreak />
</cfif>
</cfloop>
更新:
好吧,我们弄清楚了问题所在。<CFOUTPUT>
这个循环周围有两个标签,外部<CFOUTPUT query='query_name' groupby='column_name'>
标签使用的是QueryNew()
生成的查询,出于某种原因,ColdFusion 不喜欢它。所以我们解决了这个问题,它解决了我们奇怪的问题。