我最近在工作中安装了 ColdFusion 2018,并且因无法使示波器正常工作而感到沮丧。像往常一样,我将所有 .cfcs 放入 /CFC 文件夹,没有空白就不会执行application.cfm
该文件夹中的文件。我尝试过扩展应用程序,包括应用程序、代理扩展应用程序,将 CFC 移动到根文件夹只会让我在 JSON 上出现语法错误。在过去的两周里,我已经阅读了我能找到的每一篇文章,但我仍然无法理解为什么 scope 不起作用。似乎我可以在 /CFC 文件夹中设置会话变量,但它们在文件夹之外不可用?我已经有几年没有与 CF 合作了,但我认为自己很精通,而且我这辈子都无法做到这一点。我可能因为树木而错过了森林,但如果有人愿意提供帮助,我将不胜感激。
实例化对象;
application.SessionMgr = CreateObject(this.obj,'CFC.SessionMgr').init('session');
代理呼叫;
cfajaxproxy cfc="CFC/SessionMgr" jsclassname="SessionMgr";
返回是正确的;
var s = new SessionMgr();
var setReport = s.setValue('ReportID', document.getElementById('cboReportKey').value);
alert(setReport);
但是,即使手动设置session.ReportID = 7
也不会保留在文件夹之外。
这里是SessionMgr.init
这是init
;
<cffunction name="init" access="public" returntype="SessionMgr" output="no" hint="I instantiate and return this object.">
<cfargument name="scope" type="string" required="yes">
<cfargument name="requestvar" type="string" default="SessionInfo">
<cfset var scopes = "application,Client,Session">
<cfif Not ListFindNoCase(scopes, arguments.scope)>
<cfthrow message="The scope argument for SessionMgr must be a valid scope (#scopes#)." type="MethodErr">
</cfif>
<cfset variables.scope = arguments.scope>
<cfset variables.requestvar = arguments.requestvar>
<cfset updateRequestVar()>
<cfreturn this>
</cffunction>
和setValue
fn
<cffunction name="setValue" access="remote" hint="I set the value of the given user-specific variable." returntype="string">
<cfargument name="variablename" type="string" required="yes">
<cfargument name="value" type="any" required="yes">
<cfset var val = arguments.value />
<cfset SetVariable("#arguments.variablename#", val) />
<cfset r = Evaluate(arguments.variablename) />
<cfreturn r />
</cffunction>