Coldfusion 实例化一个CFC两次

Coldfusion 实例化一个CFC两次,coldfusion,coldfusion-8,cfc,Coldfusion,Coldfusion 8,Cfc,当我尝试从两个不同的CFC实例化一个CFC时,ColdFusion返回一个500错误。我试着让一个CFC扩展另一个,但它没有解决问题。这是可能的,还是我只是做错了什么 <!--- one.cfc ---> <cfcomponent name="FirstCFC"> <cfset this.Tools = createObject('component', 'toolbox').init()> .... </cfcomponent> <

当我尝试从两个不同的CFC实例化一个CFC时,ColdFusion返回一个500错误。我试着让一个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错误的屏幕截图

下面是一个更“完整”的代码示例


您包含的java堆栈跟踪表明存在无限递归错误。创建类型为A的对象时要小心,因为它们的伪构造函数中有一个类型为B的新对象。如果对象B本身在其伪构造函数中创建了类型A的对象,那么您自己就有一个被创建对象的无限递归,以一个丑陋的java堆栈跟踪结束。

您包含的java堆栈跟踪指示了一个无限递归错误。创建类型为A的对象时要小心,因为它们的伪构造函数中有一个类型为B的新对象。如果对象B本身在其伪构造函数中创建了一个类型为A的对象,那么您自己就有了一个被创建对象的无限递归,以一个丑陋的java堆栈跟踪结束。

Shawn是正确的。他发布了更多的代码,你可以看到两个.cfc生成tools.cfc和tools.cfc生成两个.cfc


您需要切换到注入样式设置(例如ala ColdSpring)。

Shawn是正确的。他发布了更多的代码,你可以看到两个.cfc生成tools.cfc和tools.cfc生成两个.cfc


您需要切换到注入式设置(例如ala ColdSpring)。

500错误通常表示web服务器配置有问题。我看不出你的代码有任何错误。假设所有三个CFC都在同一个文件夹中,500错误消息可能也会说“打开健壮的异常处理以查看更好的错误”(或类似的内容)。这样做,您就会得到一个正确的错误消息。或者,如果您正在使用IE,可能会切换“友好错误消息”。这可能会使您的问题更加明显。将两个“this.Tools”CFSET更改为“variables.Tools”,确保您的CFCLASS目录为空,重新启动CF,然后再次测试。“THIS”范围隐式地是一个公共范围(与Java相反),我有一种感觉,根据您实例化FirstCFC和SecondCFC的方式,这两个“THIS”引用在它们的伪构造函数中相互覆盖。我还暗自怀疑,作为OP中未显示的方法的一部分,存在一些递归。500错误通常表示web服务器配置有问题。我看不出你的代码有任何错误。假设所有三个CFC都在同一个文件夹中,500错误消息可能也会说“打开健壮的异常处理以查看更好的错误”(或类似的内容)。这样做,您就会得到一个正确的错误消息。或者,如果您正在使用IE,可能会切换“友好错误消息”。这可能会使您的问题更加明显。将两个“this.Tools”CFSET更改为“variables.Tools”,确保您的CFCLASS目录为空,重新启动CF,然后再次测试。“THIS”范围隐式地是一个公共范围(与Java相反),我有一种感觉,根据您实例化FirstCFC和SecondCFC的方式,这两个“THIS”引用在它们的伪构造函数中互相覆盖。我还暗自怀疑,在OP中没有显示的方法中,有一些递归正在进行……是的,我可以看出这是导致错误的原因——但他的代码中没有任何东西显示这一点。我希望他能发布更多的代码。是的。。他的示例没有显示会导致此错误的其他实例化,但他的注释似乎表明这确实是原因。是的,我可以看到导致错误的原因,但他的代码中没有显示这一点。我希望他能发布更多的代码。是的。。他的示例没有显示会导致这种情况的其他实例,但他的评论似乎表明这确实是原因。