CF 10与CF MX7的可变范围

时间:2014-03-14 19:06:19

标签: coldfusion scope coldfusion-10 application.cfc

我的ColdFusion 10代码遇到了一个奇怪的问题。我是ColdFusion的新手,所以对我很轻松。它之所以奇怪,是因为它似乎没有出现在这个平台的旧版本中(即MX 7)。

首先提供一点信息:

我有两个环境。 ColdFusion 10和ColdFusion MX 7(分别是IIS 7和IIS 5)。在ColdFusion 10环境中,我有一个Application.cfc文件,其中包含以下语句......

<cfset CompanyLogoText = "Acme Company">

Application.cfc文件位于Web根目录(mydomain.com)中。我还在mydomain.com/pages/default.cfm的Web根目录的子文件夹中有一个CFM文件。它包含以下标记...

<cfoutput><p>#CompanyLogoText#</p></cfoutput>

问题

当我导航到mydomain.com/pages/default.cfm时,我从coldfusion收到错误。错误是“变量COMPANYLOGOTEXT未定义。

奇怪的部分

我没有在ColdFusion MX 7中收到此错误。唯一的区别是CF MX 7环境使用Application.cfm文件,但具有相同的确切行。

问题

如何在CF 10环境中获取pages/default.cfm文件以查看变量CompanyLogoText

以下是完整标记

的Application.cfc

<cfcomponent>
<cfset This.name = "test_cf">
<cfset This.Sessionmanagement="yes">
<cfset This.Sessiontimeout="#createtimespan(0,0,10,0)#">
<cfset This.applicationtimeout="#createtimespan(5,0,0,0)#">
<cfset This.setclientcookies="no" >
<cfset This.clientmanagement="no">


<cffunction name="onApplicationStart">

    <cfset CompanyLogoText = "Acme Company">    

</cffunction>



<cffunction name="onRequestStart">
    <cfargument name="requestname" required=true />
    <cfset CompanyLogoText = "Acme Company">    


</cffunction>


</cfcomponent>

页/ Default.cfm

<cftry>

<cfoutput><p>#CompanyLogoText#</p></cfoutput>

<cfcatch>

<p>Could not read CompanyLogoText<br/><br/>

<cfoutput>
<br/>Message:  #cfcatch.message#
<br/>Details:  #cfcatch.detail#.

</cfoutput>

</cfcatch>

</cftry>

3 个答案:

答案 0 :(得分:4)

这是Application.cfmApplication.cfc

之间的差异

使用onRequest(),设置变量,然后cfinclude目标文件。这是分享variables范围的唯一方法。

https://wikidocs.adobe.com/wiki/display/coldfusionen/onRequest

e.g。

<cffunction name="onRequest" returnType="void"> 
    <cfargument name="targetPage" type="String" required=true/> 

    <cfinclude template="globalVars.cfm">

    <cfset variables.foo = "bar">

    <cfinclude template="#Arguments.targetPage#">
</cffunction>

引用:CF8: Migrating from Application.cfm to Application.cfc

  

在onRequest方法中放入设置Variables范围的任何代码   变量并添加包含指定页面的cfinclude标记   方法的Arguments.Targetpage变量。

答案 1 :(得分:0)

如前所述,您的application.cfc需要正确格式化。你最好的选择是给你一个读取并相应地格式化.cfc。

http://www.bennadel.com/blog/726-ColdFusion-Application-cfc-Tutorial-And-Application-cfc-Reference.htm

答案 2 :(得分:0)

暂时没有看到答案。如果子目录中有application.cfm文件,它将覆盖root中的application.cfc。只是一种可能......