为什么以下内容在 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 是一个带有标签和值列的查询。
最佳答案
在 CF10 之前,cfloop 的查询属性只能是一个字符串——查询的名称——而不是变量本身。
因此,当您放置 #arguments.values#
时,它会尝试将复杂的查询对象转换为字符串,以获取名称,这就是错误的来源。
它适用于 CF10,因为该属性已更新为还允许查询值。
旁注:
这行代码可以简化:
<cfset out = '#out#<option value="#value#">#label#</option>'>
至:
<cfset out &= '<option value="#value#">#label#</option>'>
此外,您很可能至少应该在标签上使用
HtmlEditFormat
* ,也许也应该在 value 上使用。*(或
encodeForHtml
如果它只需要在 CF10+ 中工作)关于Coldfusion Query 循环适用于 cf10 但不适用于 9,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13982595/