Coldfusion Query循环适用于cf10但不适用于9

时间:2012-12-21 00:22:31

标签: coldfusion coldfusion-9 coldfusion-10

为什么以下工作在CF10而不是CF9?

<cfset out="">
<cfif isQuery( arguments.values ) >
    <cfloop query="#arguments.values#" >            
        <cfset out = '#out#<option value="#value#">#label#</option>'>
    </cfloop>
</cfif>

CF9声明“复杂对象类型无法转换为简单值”。对于包含cfloop的行。我正在使用Coldbox框架,它的调试器信息显示arguments.values是一个带有Label&amp;的查询。值列。

1 个答案:

答案 0 :(得分:10)

在CF10之前,cfloop的查询属性只能是一个字符串 - 查询的名称 - 而不是变量本身。

因此,当您放置#arguments.values#时,它会尝试将复杂查询对象转换为字符串,以获取名称,这是错误的来源。

它适用于CF10,因为该属性已更新为允许查询值。


旁注:

这行代码可以简化:

<cfset out = '#out#<option value="#value#">#label#</option>'>

为:

<cfset out &= '<option value="#value#">#label#</option>'>

此外,你很可能至少在标签上使用HtmlEditFormat *,也许也值得。

*(或encodeForHtml如果它只需要在CF10 +中工作)