如果这是在我道歉之前被问到的,但是如果没有一些帮助,我无法获得足够的理解.
我有一个本地ColdFusion9应用程序,用于在WinXP SP3上使用Apache2进行开发和测试.
我在理解如何调用从应用程序的“THIS”范围传递给onRequestStart()方法的请求元素时遇到了问题。
例如,我的Application.cfc在“THIS”中有以下内容.
<!--- MY 'THIS' Statements in Application.cfc --->
<cfscript>
/* define custom coldfusion mappings. Keys are mapping names, values are full paths */
this.mappings = structNew();
this.mappings['/tags'] = ExpandPath('/cfdev/tags');
</cfscript>在我的Application.cfc中,我在onRequestStart()函数中有以下内容.
<!--- Run before the request is processed --->
<cffunction name="onRequestStart" returnType="boolean" output="false">
<cfargument name="thePage" type="string" required="true">
<cfinclude template="#arguments.thePage#">
<!--- Lot's of onRequest statements and then ... --->
<cfset request.mappings = #THIS.mappings#>
<cfreturn true>
</cffunction>现在..。。如果我有一页我打电话给..。
我收到一个错误声明
‘元素映射在请求中未定义。.
然而,(这是我困惑的开始).如果我打电话给两个结构.第一个包含一个值为'False‘的"cfdumpinited“键,第二个包含structKey’映射‘,其中包含另一个结构,其键为’/tag‘,值为'C:\vir_dir\CFDEV\tags’,正如人们所期望的.
如果有人能解释一下为什么这个请求成功了,但request.mappings却失败了,因为我有点陷入困境.-)
发布于 2011-08-22 15:38:17
遵循逻辑,通过:
请求是made
因此,如果您在所请求的模板中包含了以下内容:
<cfdump var="#request.mappings#>当你在第三步包括那个文件的时候.request.mappings还不存在(因为它们是在步骤4中创建的)。
但是,当您将其更改为:
<cfdump var="#request#>然后没有错误条件,所以您的CFINCLUDE运行良好,但没有输出任何内容(因为函数定义上有output="false“。
您正在看到的转储来自执行请求模板的CF (步骤6),此时存在request.mappings。
老实说,我认为您混淆了onRequestStart()和onRequest()。在onRequest()中,可以显式地包含所请求的模板,因为onRequest()将自动运行,而不是CF。通常不会在onRequestStart()中包含所请求的模板,因为它最终将运行两次。
讲得通?
发布于 2011-12-12 17:56:10
我在这里的聚会迟到了,可能错过了一个关键的因素,但为什么不这样做呢:
application.mappings = structNew()
而不是
this.mappings = structNew()
这样,您只设置了一次它们(在应用程序启动时),您可以在整个应用程序中访问它们,并且没有在每次命中页面时设置请求范围的额外开销。
https://stackoverflow.com/questions/6803129
复制相似问题