关于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 中添加任意数量的函数,例如onSessionStartonSessionEndonApplicationStartonApplicationEnd...、 但是如果没有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?

cfsetting 的 ColdFusion 9 脚本语法是啥?

如果用户未登录,请访问该页面?

重新启动应用程序而不重新启动服务器?

被禁止的页面是不是应该总是以 403 代码响应?