【问题标题】:Coldfusion VARIABLES scope fails where evaluate worksColdfusion VARIABLES 范围在评估工作时失败
【发布时间】:2012-07-17 08:57:14
【问题描述】:

在将 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 填充。 p>

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

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

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

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

【问题讨论】:

  • 您在错误中指定的变量与代码示例中的变量不同?这是误会还是我错过了什么?
  • 是的,我可以补充说,运行以下是完美的 wlc_period = VARIABLES[ 'wlc_period#y#'];
  • 我有一长串变量,wlc_period、wlc_salary、wlc_mileage,我得到了每个变量的错误,我可能在测试过程中有点混淆,我会仔细检查并更新问题

标签: coldfusion scope eval


【解决方案1】:

以下代码按预期工作。

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

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

<cfdump var="#wlc_period#">

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

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

【讨论】:

  • 效果很好...我会尝试注释掉模板中的所有其他内容并逐行恢复,直到找到原因
  • 如果您乐于使用更多代码更新您的问题,那么有人可能会更快地发现问题。
  • 我可以将完整的模板放入(直到它崩溃为止)和堆栈跟踪
【解决方案2】:

我认为您误解了 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 范围设置为。

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

【讨论】:

  • 您的回答意味着正在执行的 CFM 页面上没有 VARIABLES,它仅适用于 CFC,或者原始问题应该注意这是在 CFC 中。我只是认为应该澄清一下,因为在 Test.cfm 页面上做这样的事情: wlc_period = VARIABLES[' wlc_period#y#']; 实际上会表明我们最终会得到一个 Variables.wlc_period、variables.y 和 variables.wlc_period1
  • 正如@Snipe656 所说,我在 CFM 页面上声明的任何变量都应该出现在 VARIABLES 范围内。我的印象是 VARIABLES 范围在运行时就像页面的 GLOBAL 范围,这就是为什么像 这样的简单声明将显示为 VARIABLES.y = 1。我知道范围是如何工作的,例如 FORM 、URL、APPLICATION 等,但我目前无法理解 CFM 页面中存在的 VARIABLES 范围
猜你喜欢
  • 1970-01-01
  • 2018-03-31
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多