标签: cfc

允许不同的ColdFusion CFC相互实例的正确方法是什么?

关于在特定项目中需要相互交谈的CFC实例的正确方法,我有一个"最佳实践"问题.

比方说,您有一个Web应用程序,其中包含许多不同的模块:

  • 在线日历
  • 网上商城
  • 博客
  • 文件管理器(上传/下载/处理文件)
  • 用户帐户

这些模块中的每一个都组织得很好,以便与每个模块相关的功能包含在单独的CFC文件中:

  • Calendar.cfc
  • Store.cfc
  • Blog.cfc
  • Files.cfc
  • Users.cfc

每个CFC都包含适用于该特定模块的功能.例如,Users.cfc包含与开启/关闭用户,更新帐户信息等有关的功能......有时,CFC可能需要引用另一个CFC中的功能,例如,如果商店(Store.cfc)需要获取信息来自客户(Users.cfc).但是,我不确定实现这一目标的正确方法.我一直在玩几种方式让我的CFC互相引用:

方法1:在CFC中,例如您将需要的其他CFC:

<!--- Store.cfc --->
<cfcomponent>

<!--- instance all the CFC’s we will need here --->
<cfset usersCFC = CreateObject("component","users") />
<cfset filesCFC = CreateObject("component","files") />

<cffunction name="storeAction">

     <cfset var customerInfo = usersCFC.getUser(1) />
Run Code Online (Sandbox Code Playgroud)

这种方法似乎大部分时间都有效,除非一些实例化的CFC也实例化了它们的CFC.例如:如果Users.cfc实例Files.cfc和Files.cfc也是Users.cfc实例.由于某种类型的无限递归问题,我偶尔会遇到可怕的NULL NULL错误.

方法2:在CFC的函数范围内实例化所需的CFC(这似乎可以防止递归问题):

<!--- Store.cfc --->
<cfcomponent>

     <cffunction name="storeAction">

          <!--- create a struct to keep all this function’s variables --->
           <cfset var local = structNew() />

          <!--- instance all the CFC’s we will …
Run Code Online (Sandbox Code Playgroud)

coldfusion cfc

10
推荐指数
1
解决办法
534
查看次数

使用相对路径扩展CFC

我想在不同的目录中扩展一个CFC,我有几个选项,但无法弄清楚如何执行此操作:

A)使用动态映射(这必须是基于站点的动态,例如对于现场站点,它将是cfc.myPackage.MyCFC,但在开发站点上它将是myCfcRoot.myPackage.MyCFC) - 我试过将表达式放入extends位,但很明显CF不喜欢它,例如:

<cfcomponent name="MyComponent" extends="#config.cfcRoot#.BaseComponent">
Run Code Online (Sandbox Code Playgroud)

要么

<cfcomponent name="MyComponent" extends="#GetRealPath(../BaseComponent.cfc)#">
Run Code Online (Sandbox Code Playgroud)

B)提供CFC的相对路径(以某种方式)以进行扩展.

我担心我不能这样做,但我希望有一些我错过的东西.

coldfusion cfc

9
推荐指数
1
解决办法
1万
查看次数

收集ColdFusion CFC最佳/推荐做法?

我一直在建立一份要分享的CFC最佳实践清单.

那里有很多文章,但我认为在这里通过经验学到的任何技巧和提示可以在一起.

我会在这里添加一些链接以便它继续下去,但我认为最好的事情不是长篇文章可以用Google搜索.

CFC最佳实践

Macromedia CFC最佳实践

更新:这已被制作成社区维基

coldfusion cfc

9
推荐指数
1
解决办法
4948
查看次数

如何以<60秒的间隔运行ColdFusion计划任务?

我有一个CFC方法,我希望以30秒的间隔运行.但是,问题是ColdFusion不会让我安排以60秒或更短的间隔运行的任务.有没有人有关于我如何能够(并且应该)实现这一目标的建议?

为了先发制人地回答"当你的脚本运行时间超过30秒时会发生什么",或者任何其他类似的问题,我已经考虑了所有这些问题,这不是一个问题.

我在Windows Server 2003(IIS6)上运行ColdFusion 8.0.1(带有修补程序4).作为旁注,我使用Java 1.6u21作为ColdFusion的JVM.

提前致谢.

coldfusion cfc scheduled-tasks coldfusion-8

9
推荐指数
2
解决办法
3304
查看次数

对于CFC中的cfscript函数,默认情况下输出= false吗?

我认为CFC中定义为cfscript函数的方法默认是output = false,但是当我在cfcexplorer.cfc中打开CFC(浏览器直接到CFC)时,它表示输出:启用.

cfcexplorer.cfc的Bug?

coldfusion cfc

8
推荐指数
1
解决办法
3294
查看次数

如何将CFC存储在单独的目录中并使其工作?

有没有办法在标签中指定组件路径?

我正在为我的应用程序使用ColdFusion组件.我的应用程序有几个文件夹,每次我想要一个CFC工作时,我必须将它保存在与需要访问的文件相同的目录中.这导致我创建了几个相同的CFC文件.

有没有办法将我的CFC存储在一个目录中,并使其在我的网站上工作?

coldfusion cfc

8
推荐指数
2
解决办法
7090
查看次数

coldfusion - 接收发布的JSON数据并解析它

这是我第一次编写cfc,它将从外部Web服务器捕获JSON数据,这些数据将发布信息.

我正在使用一种新服务,可以设置为通过HTTP POST将我们发送到我指定的URL,以及有关失败事务的信息的JSON数据包.

我想我已经设置了一个具有远程访问权限的CFC来捕获和反序列化JSON数据,然后我们可以采取行动.但是,我无法弄清楚如何在CFC中设置函数来接收数据?

我将URL设置为www.mydomain.com/com/processRemote.cfc?method=catchJSONdata&ReturnFormat=json

为了测试它,我设置了一个应该发布会话数据的简单测试页面:

<cfhttp 
  result="result"
  method="post" 
  url="http://www.mydomain.com/com/processRemote.cfc?method=catchJSONdata&ReturnFormat=json">

    <cfhttpparam type="header" name="content-type" value="application/json"/>
    <cfhttpparam type="body" value="#serializeJSON(session)#"/>
Run Code Online (Sandbox Code Playgroud)

那么我迷失的地方是我在我的cfc中最初存储JSON数据的cfargument名称是什么?我无法控制将发送JSON数据的远程服务.

谢谢,

coldfusion json cfc

8
推荐指数
1
解决办法
8267
查看次数

如何在不使用Evaluate()的情况下动态调用属于实例化cfc的函数?

例如,我希望能够以编程方式命中一行代码,如下所示,在不使用Evaluate()的情况下动态分配函数名称.下面的代码当然不起作用,但代表了我想做的事情.

application.obj[funcName](argumentCollection=params)
Run Code Online (Sandbox Code Playgroud)

我可以找到动态调用函数的唯一方法是使用cfinvoke,但据我所知,它实时实例化相关的cfc /函数,不能使用以前实例化的cfc.

谢谢

coldfusion cfc

7
推荐指数
1
解决办法
3938
查看次数

在Coldfusion cfc中,函数外部设置的变量的范围名称是什么?

在Coldfusion组件/ CFC中,我想正确地将一些变量的范围限定为可用于所有包含的函数,但是要隐藏或阻止外部脚本.cfc的内存范围是什么名字?这是'变量'吗?是否在包含的函数内可用?它是否被阻止在cfc之外?

(CF 8中的例子)

致电页面:

<cfset settings = structNew()>
<cfset util = createObject("component", "myUtils").init(settings)>
<cfoutput>
    #util.myFunction()#
</cfoutput>
Run Code Online (Sandbox Code Playgroud)

myUtils.cfc:

<cfcomponent>
<!--- Need to set some cfc global vars here --->

    <cffunction name="init" access="public">
        <cfargument name="settings" type="struct" required="no">
        <!--- I need to merge arguments.settings to the cfc global vars here --->
        <cfreturn this>
    </cffunction>

    <cffunction name="myFunction" access="public">
        <cfset var result = "">
        <!--- I need to access the cfc global vars here for init settings --->
        <cfreturn result>
    </cffunction>
</cfcomponent>
Run Code Online (Sandbox Code Playgroud)

欢迎提供其他最佳实践建议.我做完这件事已经有一段时间了.提前致谢.

coldfusion cfc

7
推荐指数
2
解决办法
7821
查看次数

coldfusion奇怪的额外空间

我有一个函数将字符串转换为数字

<cffunction name="convertToNumber" returntype="numeric">
    <cfargument name="separator" required="Yes" type="string" />
    <cfargument name="number" required="Yes" type="string" />

    <cfset LOCAL.arrSeparator = ["comma", "period", "lakh_crore"] />

    <cfif ARGUMENTS.separator eq "comma" or ARGUMENTS.separator eq "lakh_crore">
        <cfif ListLen(ARGUMENTS.number, ".") eq 2>
            <cfset LOCAL.integral = ListFirst(ARGUMENTS.number, ".") />
            <cfset LOCAL.fractional = ListLast(ARGUMENTS.number, ".") />
        <cfelse>
            <cfset LOCAL.integral = ARGUMENTS.number />
            <cfset LOCAL.fractional = "" />
        </cfif>

        <cfset LOCAL.integral = Replace(LOCAL.integral, ",", "", "ALL") />
        <cfset LOCAL.returnValue = LOCAL.integral />

        <cfif Len(Trim(LOCAL.fractional))>
            <cfset LOCAL.returnValue &= "." & LOCAL.fractional /> …
Run Code Online (Sandbox Code Playgroud)

coldfusion cfc

7
推荐指数
1
解决办法
1228
查看次数

标签 统计

cfc ×10

coldfusion ×10

coldfusion-8 ×1

json ×1

scheduled-tasks ×1