Coldfusion VARIABLES范围在评估工作时失败

时间:2012-07-17 08:57:14

标签: coldfusion scope eval

将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(),我在这里遗漏了什么吗?

2 个答案:

答案 0 :(得分:1)

以下代码对我有效。

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

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

<cfdump var="#wlc_period#">

如果你只有.cfm文件,那对你有用吗?

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

答案 1 :(得分:0)

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

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

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

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

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

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

您可能也应该y范围。

如果像这样适当地调整变量范围,可以避免遇到多个范围具有相同变量的问题。