【问题标题】:attributes.someParam cannot be evaluated in coldfusionattributes.someParam 无法在冷融合中进行评估
【发布时间】:2010-12-04 21:55:01
【问题描述】:

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

有什么想法吗?

谢谢

【问题讨论】:

    标签: coldfusion attributes resolve evaluate


    【解决方案1】:

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

    <cfset foo = myObject.getSomething() />
    

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

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

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

    3. 去掉评估,改用 Attributes[param_name]

    【讨论】:

    • 是的,我很想知道如果您使用数组表示法而不是评估会发生什么,即 Attributes[param_name]。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      在黑暗中拍摄:

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

      在CFMX 6 docs on CFMODULE的用户cmets中看到。

      【讨论】:

      • 请原谅这个非常愚蠢的问题,....但是 cfmx 的错误跟踪器在哪里? ...它似乎没有出现在我的谷歌查询中。
      • 在 cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html 中搜索错误 51067 和 45138 什么也得不到。
      • 似乎降压追踪器可能已经迷失在 Macromedia 向 Adob​​e 过渡的潮流中。恐怕我也找不到他们。 :-\
      【解决方案4】:

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

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

      感谢您的所有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-20
        • 1970-01-01
        相关资源
        最近更新 更多