使用包含文件的功能使coldfusion忘记导入.这是正常的吗?

jan*_*jan 5 coldfusion coldfusion-9 coldfusion-10 cfimport

我注意到当我调用之前包含的(cfinclude).cfm文件的函数时,此时发生的所有coldfusion导入(cfimport)都被遗忘了.这就像你没有进口任何东西.我发现这种非常奇怪的行为所以我已经将它隔离了,但结果保持不变,即使在coldfusion 10中也是如此.

我的设置:

/例

  • functions.cfm
  • index.cfm
  • /组件
    • MyCFC.cfc

functions.cfm:

<cfscript>
  function test(){
    return "test";
  }
</cfscript>

组件/ MyCFC.cfc:

component  output="false"{}

index.cfm:

<cfscript>
  include "functions.cfm";
  import components.MyCFC;
foo = test(); bar = new MyCFC(); </cfscript>

此代码将抛出coldfusion错误:"找不到ColdFusion组件或接口MyCFC".当foo = test();移除或放置后bar = new MyCFC();,该代码将运行得很好.

如果在包含之前或之后放置导入并不重要.每当调用包含的函数时,都会忘记导入.

这是一个错误还是它应该以这种方式表现?

在coldfusion 9,0,0,251028和coldfusion 10,282462中进行了测试

小智 3

由于我进行了大量导入,我最近遇到了一些奇怪的行为,并报告它执行 CF9-bugbase: https://bugbase.adobe.com/index.cfm ?event=bug&id=3288035

ColdFusion 仅解析当前文件的导入,每当您调用不同的文件时,就像“执行上下文”切换到带有导入的文件。因此,在您的情况下,当您执行new ColdFusion 时,会在functions.cfm中查找导入。然后,当您调用当前文件的方法时,它会切换回来并查找导入。

如果我是对的,如果您bar = new MyCFC();在导入后直接执行,您的代码应该可以工作。或者,您可以在创建类之前在index.cfm中定义另一个方法并调用它。

要解决该错误,您需要确保在发生“上下文切换”之前解决导入问题(在对象生命周期中首次使用时)。所以new MyCFC();在外部方法之前调用。

@Adobe:很高兴解决这个问题;)