无法在coldfusion中评估attributes.someParam

时间:2009-10-08 08:09:35

标签: coldfusion attributes resolve evaluate

我的cfm中有这样的东西

<CFModule name="MyModule"
    someParam_one="#something.one#"
    someParam_two="#something.two#"
    someParam_etc="etc_etc_etc"/>

在我的模块中,我有一个

<CFSet param_name = "someParam_one">
...
evaluate("attributes." & param_name)

在我们的大多数服务器上,这项工作。但是在我们的一台服务器上,我得到了一个

  

解析参数 ATTRIBUTES.SOMEPARAM_NAME

时出错

任何想法为什么?

由于

4 个答案:

答案 0 :(得分:3)

您是否确认某些Param_one实际上已创建?例如,我发现如果我做这样的事情:

<cfset foo = myObject.getSomething() />

和getSomething返回一个void值或运行一个不返回任何东西的Java函数,CF会阻塞它。变量将被“定义”,或者应用程序似乎在想,但尝试访问它会引发错误。因此,请执行以下操作以追踪并发现问题:

  1. 转储您的属性范围,以确保您想要的确实存在。

  2. 在尝试访问变量之前运行StructKeyExists(Attributes,param_name)。

  3. 摆脱评估,改为使用属性[param_name]

答案 1 :(得分:2)

与你的问题相切,但Evaluate()是邪恶的,在这种情况下是不必要的邪恶。你可以写这个,它会更清晰,更安全,更快:

<cfset param_name = "someParam_one">
...
<cfset param_value = Attributes[param_name]>

答案 2 :(得分:1)

在黑暗中拍摄:

  

CFMX中有一个错误,如果你   对模板进行CFMODULE调用(或   在CFC中使用自定义标签)   tempate使用CALLER范围   返回数据,数据永远不会   可用于CFC功能。这是   bug 51067和它有关   VARIABLES范围错误,45138。

CFMX 6 docs on CFMODULE中的用户评论中看到。

答案 3 :(得分:1)

好的,我们做了一些非常愚蠢的事情: - )

我们部署了两组这些文件,一组已更新而另一组未更新,因此出现错误。

感谢您的帮助。