2012-04-22 27 views
1

當我試圖從兩個不同的CFC實例化一個CFC時,ColdFusion返回一個500錯誤。我試圖讓其中一個CFC延伸到另一個,但它沒有解決問題。這是可能的,還是我只是在做一些不正確的事情?實例化一個CFC兩次

<!--- one.cfc ---> 
<cfcomponent name="FirstCFC"> 
    <cfset this.Tools = createObject('component', 'toolbox').init()> 
.... 
</cfcomponent> 

<!--- two.cfc ---> 
<cfcomponent name="SecondFC"> 
    <cfset this.Tools = createObject('component', 'toolbox').init()> 
.... 
</cfcomponent> 

<!--- toolbox.cfc ---> 
<cfcomponent name="Toolbox"> 
    <cffunction name="init" access="public"> 
     <cfreturn this> 
    </cffunction> 

    <cffunction name="someFunc" access="public"> 
    </cffunction> 
</cfcomponent> 

這裏是500錯誤

enter image description here

下面的截圖是一個更加 「完整」 的代碼示例

http://pastebin.com/zJ1zpHYy

+1

500錯誤通常表示您的Web服務器配置存在問題。我沒有看到你的代碼有什麼問題。 – 2012-04-22 03:55:59

+0

假設所有三個CFC位於同一個文件夾 – 2012-04-22 04:22:38

+0

500錯誤信息可能也是說「開啓強健的異常處理以查看更好的錯誤」(或其他情緒)。這樣做,所以你得到一個適當的錯誤消息。或者,如果您使用的是IE瀏覽器,可能會切換「友好的錯誤消息」。這可能會讓你的問題更加明顯。 – 2012-04-22 11:23:27

回答

3

Java堆棧跟蹤你已經包括指示無限遞歸錯誤。在創建類型A的對象時要小心,它們的僞構造函數中有一個類型爲B的新對象。如果對象B 本身僞構造函數中創建了A類型的對象,那麼您有自己創建的對象的無限遞歸,並以一個醜陋的Java堆棧跟蹤結束。

+1

是的 - 我可以看到導致錯誤 - 但他的代碼中沒有任何顯示。我希望他會發布更多的代碼。 – 2012-04-23 11:38:50

+0

是的。他的樣本沒有顯示出會導致這種情況的附加實例 - 但他的評論似乎表明它的確是原因。 – 2012-04-23 14:33:19

1

肖恩是對的。他發佈了更多代碼,您可以看到two.cfc生成tools.cfc,tools.cfc生成two.cfc。

您需要移動到注射樣式設置(例如ala ColdSpring)。