0

将 VARIABLES 范围与动态变量名一起使用时出现以下错误:

Element wlc_period is undefined in a Java object of type class coldfusion.runtime.VariableScope.

当我尝试运行此代码时:

<cfparam name="wlc_period#y#" default="36">

<cfscript>
wlc_period      = VARIABLES['wlc_period#y#'];
</cfscript>

但如果我使用evaluate(),它可以工作:

<cfscript>
wlc_period      = evaluate('wlc_period#y#');
</cfscript>

在执行时,y变量是一个空字符串,但代码会在循环中的其他地方使用,因此有时可以用整数 1 - 5 填充。

代码应该尝试访问wlc_period,如果我只是做一个简单的转储,它就可以工作:

<cfparam name="wlc_period#y#" default="36">

<cfscript>
writedump(wlc_period);
</cfscript>

我宁愿使用 VARIABLES 范围而不是 evaulate(),我在这里遗漏了什么吗?

4

2 回答 2

1

以下代码按预期工作。

<cfset y = "">
<cfparam name="wlc_period#y#" default="36">

<cfscript>
   wlc_period      = VARIABLES['wlc_period#y#'];
</cfscript>

<cfdump var="#wlc_period#">

如果您只有 .cfm 文件中的那个,那对您有用吗?

我怀疑您遇到的问题与您发布的代码无关。

于 2012-07-17T16:32:17.663 回答
0

我认为你误解了VARIABLES范围是什么。或者可能真正的范围变量是什么。

范围变量是存储在特定集合中的值。例如,FORM范围存储从 FORM 帖子传递的所有值。URL范围存储在 URL 的查询字符串中传递的所有值。

VARIABLES 范围用于 ColdFusion 组件 (CFC)。它用于保持某些 CFC 属性可重用但私有。VARIABLES 范围不仅仅是一个存储所有变量的对象。

查看您的代码,wlc_period#y这只是您正在设置的局部变量。我建议将值存储在本地范围内。我喜欢对局部变量使用“LOCAL”:

<cfparam name="LOCAL.wlc_period#y#" default="36">

<cfscript>
wlc_period      = LOCAL['wlc_period#y#'];
</cfscript>

您可能也应该范围y

当您像这样正确地确定变量的范围时,您可以避免遇到多个范围具有相同变量的问题。

于 2012-07-17T13:26:07.183 回答