2012-04-22 78 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)。