2

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

<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 
4

3 回答 3

3

除了Scott 的评论之外,您还需要澄清您实际想要实现的目标。该问题询问有关附加新项目的问题,但看起来您的部分代码试图覆盖position 中的现有结构值session.box_status[1]

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

<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 }>
于 2014-10-19T16:55:18.453 回答
2

in 的第一个参数arrayAppend()需要是您要附加某些内容的数组,在您的示例中,您正在使用i- 这是循环的计数器 - 这是一个数字,而不是数组。

于 2014-10-19T14:12:19.693 回答
1

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

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

而不是正确的表达

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

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

于 2016-04-19T23:01:07.260 回答