关于Application.cfc中onRequest方法的coldfusion问题
Posted
技术标签:
【中文标题】关于Application.cfc中onRequest方法的coldfusion问题【英文标题】:coldfusion problem about onRequest method in Application.cfc 【发布时间】:2009-07-09 07:50:51 【问题描述】:我因冷融合问题而受阻,感谢任何建议。现在让我描述一下我的问题。
我的网站根目录有一个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
,一切正常,但是当我删除Application.cfc
中的onRequest
方法并再次请求test.cfm
时,它抱怨"Element THIS is undefined in VARIABLES. "
,我不知道为什么,谁能解释一下?非常感谢。
ps:
您可以在Application.cfc
中添加任意数量的函数,例如onSessionStart
、onSessionEnd
、onApplicationStart
、onApplicationEnd
...、
但是如果没有onRequest
方法,您请求test.cfm
并得到错误。我只是不知道为什么。
【问题讨论】:
【参考方案1】:这是因为 this 范围引用了一个 cfc 实例。当您在 application.cfc 中包含 test.cfm 时,this 指的是 application.cfc 实例。当你直接调用 test.cfm 时 this 不存在,因为请求没有经过 application.cfc,所以你不在 cfc 实例中。
不确定您要做什么,但您可能不想在 cfc 之外使用 this。如果你想从 test.cfm 中转储应用程序范围,只需这样做:
<cfdump var="#application#"/>
【讨论】:
【参考方案2】:从 onRequestStart 方法返回 true 将为您加载页面。正如 dwb 所说,您的“this”指的是 Application.cfc,因为您已将其包含在其中一种方法中。如果您需要引用应用程序,请使用应用程序范围而不是“this”,除非您确实在 Application.cfc 中。
【讨论】:
这是不正确的——对于那些在没有测试或确定它是正确的情况下盲目投票的人来说,这是一种耻辱!如果您不包含请求的文件,您将看不到任何输出。 (参见:livedocs.adobe.com/coldfusion/8/htmldocs/…)也许您在考虑 onRequestEnd 事件?你所说的对 onRequestStart 是正确的。 (见:livedocs.adobe.com/coldfusion/8/htmldocs/…) 哈-你是对的。我在想onRequestStart。我会编辑我的答案,虽然我不确定它是否仍然相关......以上是关于关于Application.cfc中onRequest方法的coldfusion问题的主要内容,如果未能解决你的问题,请参考以下文章
直接访问 application.cfc 会产生未捕获的 ColdFusion 错误
如何在应用程序超时时重新启动Coldfusion Application Server?