【问题标题】:Upgraded to ColdFusion 9 getting strange cfif error升级到 ColdFusion 9 出现奇怪的 cfif 错误
【发布时间】:2012-02-07 19:21:38
【问题描述】:

我有几个地方有这样的代码:

<cfinvoke component="#application.path#cfc/eval_faculty" method="getPresentations" returnvariable="presentations">
    <cfinvokeargument name="id" value="#eval_id#">
    <cfinvokeargument name="evalYear" value="#eval_semester#">
    <cfinvokeargument name="department" value="#general.dept#">
</cfinvoke>

<cfset prescheck = 0>
<cfloop query="presentations">
    <cfif local eq "" and regional eq "" and national eq "" and international eq "">
        <cfset prescheck = prescheck+1>
    </cfif>
</cfloop>

我收到此错误:

Complex object types cannot be converted to simple values.

cfif 语句中的这些值都不是复杂对象。

这在 ColdFusion 8 中运行良好。我们刚刚升级到 ColdFusion 9...

错误发生在&lt;cfif local eq "" ... &gt;这一行

有什么想法吗?

【问题讨论】:

    标签: coldfusion coldfusion-9


    【解决方案1】:
    <cfif local eq ""
    

    LOCAL 现在可能是 CF9 中的系统范围,例如 FORMURL 等等。因此,当您尝试对其执行字符串比较时,CF 会抱怨,因为它是一个结构。如果LOCAL 代表旧代码中的简单变量,请尝试使用不同的变量名称。

    更新:来自 cmets,如果 LOCAL 是您查询中的列名,您可以使用 sql 别名为其指定另一个名称:

      SELECT Local AS LocalAlias FROM Table
    

    ...或使用完全限定的变量名:

       <cfif queryName.local ...>
    

    【讨论】:

    • 如果我做不到怎么办? Local 是数据库表属性的名称。 :(
    • 这段代码是否在 cffunction 中使用?您始终可以为查询中的列命名为 SELECT Local AS LocalAlias。然后改用别名。或者您可以尝试使用完全限定名称:即&lt;cfif queryName.local ...&gt;
    • 哦,是的。我今天太傻了。我忘了你可以做 AS xxx ......但我改变它是不明智的,因为它在很多地方都使用过。现在我正在做query.local。我想当我在 . 中指定查询时,它会将本地识别为在所述查询范围内
    • 是的,但是范围名称将优先于查询列名称。例如,如果你有一个名为“session”的数据库列,你会得到相同的结果。
    • @Al - 对,但完全限定名称,即queryName.Local 应该避免这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 2019-05-16
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多