我是新版ColdFusion的新手,我遇到了一个简单的数据绑定到cfselect的问题。我已经尽力彻底研究它,我甚至回到了教科书,基本上复制了测试文件中的代码示例,我仍然得到同样的错误。
我正在尝试建立常见的情况,其中有2个cfselects,第二个依赖于第一个,但在这一点上,我甚至无法让第一个工作。返回的错误是:
“选择框Species_id绑定失败,绑定值不是2D数组或有效的序列化查询”
提前感谢您的帮助。这是代码:
<cfcomponent>
<cffunction name="getSpecies" access="remote" returnType="array">
<cfset var rsData = "">
<cfset var myReturn=ArrayNew(2)>
<cfset var i=0>
<cfstoredproc datasource="#application.dsn#" procedure="up_get_Species">
<cfprocresult name="DataResults">
</cfstoredproc>
<cfloop query="DataResults">
<cfset myReturn[rsData.currentRow][1]=rsData.Species_id>
<cfset myReturn[rsData.currentRow][2]=rsData.Species>
</cfloop>
<cfreturn myReturn>
</cffunction>
</cfcomponent>
<html>
<head>
<title>CFSelect Example</title>
</head>
<body>
<h1>Sandbox for getting cfselect bind working</h1>
<cfform name="form1">
Wood Type
<br>
<cfselect name="Species_id" bind="office.cfc:data.getspecies()"
bindOnLoad = "true" />
</cfform>
</body>
</html>
答案 0 :(得分:2)
看起来您的绑定语法已关闭。绑定表达式应该以绑定的type:
开头(cfc,url,javascript)。由于您绑定到组件,因此必须在其前面添加"cfc:"
,即
bind="cfc:path.to.yourComponentName.yourFunctionName()"
也就是说,CF的更高版本支持绑定到查询,这简化了绑定。只需将功能returnType
更改为query
即可。
<cffunction name="getSpecies" access="remote" returnType="query">
<!--- Be sure to Local scope all variables, including query names --->
<cfstoredproc datasource="#application.dsn#" procedure="up_get_Species">
<cfprocresult name="Local.DataResults">
</cfstoredproc>
<cfreturn Local.DataResults >
</cffunction>
然后在选择列表中指定display
和value
属性
<cfselect name="service"
bind="cfc:office.cfc:data.getSpecies()"
display="Species"
value="Species_id" ...>