我的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
时出错
任何想法为什么?
由于
答案 0 :(得分:3)
您是否确认某些Param_one实际上已创建?例如,我发现如果我做这样的事情:
<cfset foo = myObject.getSomething() />
和getSomething返回一个void值或运行一个不返回任何东西的Java函数,CF会阻塞它。变量将被“定义”,或者应用程序似乎在想,但尝试访问它会引发错误。因此,请执行以下操作以追踪并发现问题:
转储您的属性范围,以确保您想要的确实存在。
在尝试访问变量之前运行StructKeyExists(Attributes,param_name)。
摆脱评估,改为使用属性[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)
好的,我们做了一些非常愚蠢的事情: - )
我们部署了两组这些文件,一组已更新而另一组未更新,因此出现错误。
感谢您的帮助。