我正在尝试将我支持的应用程序从application.cfm转换为application.cfc。我遵循了Ben Nadel的ColdFusion Application.cfc Tutorial And Application.cfc Reference,但是如果不将APPLICATION.添加到变量中,我的页面就无法访问应用程序范围内的任何变量。顺便说一句,这个应用程序目前使用了0个cfc。
这是我的application.cfc。
<cfcomponent displayname="Application" hint="Handle the application" output="true">
<cfset THIS.Name = "AAS" />
<cfset THIS.ApplicationTimeout = CreateTimeSpan( 0, 60, 0 , 0) />
<cfset THIS.SessionManagement = true />
<cfset THIS.setClientCookies = false />
<cfset THIS.versionNum = '1'>
<cfset THIS.genericUserID = 'o005265'>
<cfset THIS.genericPassword = 'zo005265'>
<cffunction
name="OnApplicationStart"
hint="Fires when the application is first created."
access="public"
output="false"
returntype="boolean">
<cfset APPLICATION.aasURL = 'http://127.0.0.1:8500/aaas'>
<cfset APPLICATION.dsn = 've0_aaas'>
<cfset APPLICATION.aas_system = 'development (studio)'>
<cfreturn true />
</cffunction>
</cfcomponent>基本上,我只是复制了application.cfm页面中的内容,并认为它的工作原理是一样的。我猜我必须在某个地方调用它?这是我唯一能想到的事情。任何帮助都是最好的。
-编辑
我在@EvikJames answer后面添加了OnRequest和OnApplicationStart方法
<cffunction name="OnApplicationStart" access="public" returntype="boolean" output="false" hint="Fires when the application is first created.">
<!--- Return out. --->
<cfset APPLICATION.aasURL = 'http://127.0.0.1:8500/aaas'>
<cfset APPLICATION.datasource = 've0_aaas'>
<cfset APPLICATION.aas_system = 'development (studio)'>
<cfreturn true />
</cffunction>
<cffunction name="OnRequest" access="public" returntype="void" output="true" hint="Fires after pre page processing is complete.">
<!--- Define arguments. --->
<cfargument name="TargetPage" type="string" required="true">
<!--- Include the requested page. --->
<cfinclude template="#ARGUMENTS.TargetPage#" />
<cfset VARIABLES.dsn = APPLICATION.dsn>
<cfset VARIABLES.aasURL = APPLICATION.aasURL>
<cfset VARIABLES.aas_system = APPLICATION.aas_system>
<!--- Return out. --->
<cfreturn />
</cffunction>发布于 2012-03-31 03:31:48
在您的onApplication start方法中,执行以下操作:
<cfset APPLICATION.datasource = 'MyDSN'>在您的onRequest方法中,执行以下操作:
<cfset VARIABLES.DSN = APPLICATION.datasource>然后,此查询将起作用:
<cfquery datasource="#dsn#">
// sql
</cfquery>我要补充的是,当您完全升级时,您可以删除上面的所有代码,只需设置默认数据源:
<cfset THIS.datasource = 'MyDSN'>发布于 2012-03-31 03:31:47
您并不是真的在尝试使用"application“变量(它们总是需要限定作用域)。我怀疑你以前的application.cfm页面上有这样的东西。
<cfapplicatin name="blah"...>
<cfset dsn = 'mydsn'/>然后你就能做到:
<cfquery datasource="#dsn#">此方法不利用应用程序范围...它只是在利用这样一个事实,即无论发生什么情况,您的application.cfm都会运行。它实际做的是将变量放在变量作用域中。因为CF总是首先检查“变量”作用域,所以你可以像#dsn#一样工作--但这与应用程序作用域不同。
要在Application.cfc中模拟此行为(已建议),您需要将变量放在"onRequest()“函数中,而不是"onApplicationstart()”函数中-如下所示:
<cffunction name="onRequest">
<cfset dsn = 'mydsn'/>
</cffunction>发布于 2012-03-31 02:59:16
这是意料之中的。要引用应用程序变量,需要在它们前面加上application前缀。
https://stackoverflow.com/questions/9948699
复制相似问题