2009-07-09 18 views
1

我被一个coldfusion问题阻塞了,任何建议都会被赞赏。现在让我记下我的问题。Coldfusion关于Application.cfc中onRequest方法的问题


我有一个Application.cfc在我的网站的根,它的内容如下:

<cfcomponent output="false"> 
    <cffunction name="onRequest" returnType="void"> 
     <cfargument name="thePage" type="string" required="true"> 
     <cfinclude template="#arguments.thePage#"> 
    </cffunction> 
</cfcomponent> 

而且我有一个CFM模板,该模板的名称是test.cfm,它的内容被列为如下:

<cfdump var="#variables.this#"><br /><br /><br /><br /><br /><br /> 
<cfdump var="#this#"> 

现在如果你要求test.cfm,一切正常,但是当我删除onRequest方法Application.cfc和请求test.cfm再次,它投诉"Element THIS is undefined in VARIABLES. ",我不知道为什么,有人可以解释它吗?万分感谢。

PS:

你可以添加尽可能多的功能集成到Application.cfc,如onSessionStartonSessionEndonApplicationStartonApplicationEnd ..., 但如果没有一个onRequest方法,你要求test.cfm并得到错误。我只是不知道为什么。

回答

7

这是因为这个范围是指一个cfc实例。当您在application.cfc 中包含test.cfm时,此引用application.cfc实例。当你直接调用test.cfm时这个不存在,因为请求没有经过application.cfc,所以你不在cfc实例中。

不知道你在做什么,但你可能不想在cfc之外使用这个。如果你想从倾倒的test.cfm应用范围只是这样做,而不是:

<cfdump var="#application#"/> 
3

返回true从onRequestStart方法将加载页面为您服务。正如dwb所说,你的'this'指的是Application.cfc,因为你已经从一个方法中包含了它。如果您需要引用应用程序,请使用应用程序范围而不是“this”,除非您真的在Application.cfc中。

+1

这是不正确的 - 对任何盲目投票未经测试或确切知道它是正确的人都感到羞耻!如果您不包含请求的文件,您将看不到输出。 (请参阅:http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=AppEvents_08.html)或许您正在考虑onRequestEnd事件?你说的onRequestStart是真的。 (请参阅:http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=AppEvents_08.html) – 2009-07-10 18:33:56