0

我的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

4 回答 4

3

您是否验证过 someParam_one 实际上正在创建?例如,我发现如果我这样做:

<cfset foo = myObject.getSomething() />

并且 getSomething 返回一个 void 值或运行一个不返回任何内容的 Java 函数,CF 会窒息它。该变量将被“定义”,或者应用程序似乎是这样认为的,但尝试访问它会引发错误。因此,请执行以下操作来追踪并发现问题:

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

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

  3. 摆脱评估,而是使用 Attributes[param_name]

于 2009-10-08T12:18:25.410 回答
2

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

<cfset param_name = "someParam_one">
...
<cfset param_value = Attributes[param_name]>
于 2009-10-19T01:28:43.917 回答
1

盲目猜测:

CFMX 中存在一个错误,如果您从 CFC 中对模板(或使用自定义标记)进行 CFMODULE 调用,并且该模板使用 CALLER 范围返回数据,则数据永远无法用于 CFC 函数。这是错误 51067,它与 VARIABLES 范围错误 45138 有关。

在 CFMODULE 上的 CFMX 6 文档中的用户评论中可以看到。

于 2009-10-08T08:17:20.793 回答
1

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

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

感谢你的帮助。

于 2009-10-21T02:28:31.523 回答