5

以前にインクルードした (cfinclude) .cfm ファイルの関数を呼び出すと、この時点で発生したすべての coldfusion インポート (cfimport) が忘れられていることに気付きました。何もインポートしていないようです。この非常に奇妙な動作を見つけたので分離しましたが、coldfusion 10 でも結果は変わりませんでした。

私のセットアップ:

/例

  • 関数.cfm
  • 索引.cfm
  • /コンポーネント
    • MyCFC.cfc

関数.cfm:

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

コンポーネント/MyCFC.cfc:

component  output="false"{}

インデックス.cfm:

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

このコードは、「ColdFusion コンポーネントまたはインターフェース MyCFC が見つかりませんでした」という coldfusion エラーをスローします。をfoo = test();削除または の後に配置bar = new MyCFC();すると、コードは問題なく実行されます。

インポートがインクルードの前または後に配置されているかどうかは問題ではありません。含まれている関数が呼び出されるたびに、インポートは忘れられます。

これはバグですか、それともこのように動作するはずですか?

コールドフュージョン 9,0,0,251028 およびコールドフュージョン 10,282462 でテスト済み

4

2 に答える 2

3

私は多くのインポートを行っているため、最近、いくつかの奇妙な動作に遭遇し、それが CF9 バグベースであると報告しました: https://bugbase.adobe.com/index.cfm?event=bug&id=3288035

ColdFusion は現在のファイルのインポートのみを解決し、別のファイルを呼び出すたびに、「実行コンテキスト」がそのインポートを使用してそのファイルに切り替わるようになります。したがって、あなたの場合、新しいColdFusionを実行すると、 functions.cfmでインポートが検索されます。次に、現在のファイルのメソッドを呼び出すと、元に戻り、インポートが見つかります。

私が正しければbar = new MyCFC();、インポートの直後に実行すると、コードが機能するはずです。または、クラスを作成する前に、 index.cfmで別のメソッドを定義して呼び出すこともできます。

そのバグを回避するには、「コンテキストの切り替え」が行われる前に、(オブジェクトのライフサイクルでの最初の使用時に) インポートが解決されていることを確認する必要があります。したがってnew MyCFC();、外部メソッドの前に呼び出します。

@アドビ:これを修正するといいでしょう;)

于 2012-09-25T10:05:01.260 に答える
1

私は@PeterBoughtonと一緒です、これはバグのように聞こえます。同様のバグが報告されているのも見つけられなかったので、提出を進めます。それまでの間、「インポート」を破棄しても、次を使用して CFC を参照できるはずです。

bar = new components.MyCFC();

大漁!

于 2012-09-24T14:55:28.723 に答える