Aar*_*ron 7 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>
Run Code Online (Sandbox Code Playgroud)
CF9声明"复杂对象类型无法转换为简单值".对于包含cfloop的行.我正在使用Coldbox框架,它的调试器信息显示arguments.values是一个带有Label&Value列的查询.
Pet*_*ton 10
在CF10之前,cfloop的查询属性只能是一个字符串 - 查询的名称 - 而不是变量本身.
所以,当你把#arguments.values#它试图将复杂的查询对象转换为字符串时,要获取一个名称,这是错误的来源.
它在CF10中工作,因为该属性已更新为还允许查询值.
附注:
这行代码可以简化:
<cfset out = '#out#<option value="#value#">#label#</option>'>
Run Code Online (Sandbox Code Playgroud)
至:
<cfset out &= '<option value="#value#">#label#</option>'>
Run Code Online (Sandbox Code Playgroud)
你也很可能应该HtmlEditFormat至少使用*标签,也许也值得.
*(或者encodeForHtml只需要在CF10 +中工作)