cfselect没有绑定到cfc

时间:2013-04-11 17:27:16

标签: binding coldfusion coldfusion-10 cfselect

我是新版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>

1 个答案:

答案 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>

然后在选择列表中指定displayvalue属性    

<cfselect name="service" 
          bind="cfc:office.cfc:data.getSpecies()"
          display="Species"
          value="Species_id" ...>