创建一系列令人不安的结构

时间:2014-10-19 11:40:29

标签: coldfusion coldfusion-11

我正在尝试在我的Application.cfm文件中创建一个结构数组,然后可以将其附加到其他页面中。我正在关注EasyCFM tutorial #173 by Charlie。我这样用它:

<cfset session.box_status = arrayNew(1) />
<cfset session.box_status[1] = structNew() />
<cfset session.box_status[1].partner_id = '0' />
<cfset session.box_status[1].partner_username = '' />
<cfset session.box_status[1].status = '0' />

在我的页面中,我追加到这样的结构:

<cfloop from="1" to="#arrayLen(session.box_status)#" index="i">
  <cfset session.box_status[i].partner_id = ArrayAppend(i,FORM.partner_id) />
  <cfset session.box_status[i].partner_username = ArrayAppend(i,FORM.partner_username) />
  <cfset session.box_status[i].status = ArrayAppend(i,FORM.box_status) />
</cfloop>

但是我收到了错误:

    The web site you are accessing has experienced an unexpected error.
Please contact the website administrator.

The following information is meant for the website developer for debugging purposes.
Error Occurred While Processing Request
Object of type class java.lang.Double cannot be used as an array 

3 个答案:

答案 0 :(得分:3)

除了Scott's comments之外,您还需要澄清实际上要实现的目标。该问题询问追加一个新项目,但看起来好像部分代码试图覆盖位置session.box_status[1]中的现有结构值。

如果您确实想要将 new 结构附加到数组中,则没有理由循环。只需创建一个空结构:

<cfset newItem = structNew() /> 

...用一些值填充它:

<cfset newItem.partner_id = FORM.partner_id>
... etcetera

然后将新结构追加到数组中。请注意,下面的代码不关心ArrayAppend的结果。这是因为函数修改了数组,只返回true/false,具体取决于操作是否成功。

<cfset ArrayAppend(session.box_status, newItem)>

<强>更新

那就是说,你使用的教程显然是为旧版本的CF编写的。正如@cfqueryparam所指出的,后来的版本支持创建数组和结构的简写。您可以简单地执行此操作,而不是使用structNew()

 <cfset newItem = { partner_id = FORM.partner_id, ... etectera }>

答案 1 :(得分:2)

arrayAppend()中的第一个参数需要是你要添加内容的数组,在你的例子中,你正在使用i - 这是你的循环的计数器 - 这是一个数字,不是阵列。

答案 2 :(得分:1)

请注意,常见错误是传递数组名称,但忘记放置井号。对我来说,当我犯错误时说

<cfloop array="myAry" index="aryElement">

而不是正确的表达

<cfloop array="#myAry#" index="aryElement">

然后调试消息 java.lang.string不能用作发出的数组