coldfusion 9动态调用方法

Jar*_*ede 2 coldfusion coldfusion-9

我正在尝试从已传递到引用另一个对象的对象的字符串构建方法调用.

通常在调用对象时,我们编写如下代码:

application.stObj.oNewsBusiness.getNews(argumentCollection=local.stArgs);
Run Code Online (Sandbox Code Playgroud)

但是,我所做的是创建一个包含对象名称,方法名称和参数集合的数组.

<cfscript>
local.stArgs = {};
local.stArgs.nNewsID = 19;
local.stArgs.sAuthor = "John";

local.aData = [];
local.aData[1] = local.stArgs;
local.aData[2] = "stObj.oNewsBusiness";
local.aData[3] = "getNews";
</cfscript>
Run Code Online (Sandbox Code Playgroud)

但是我正在努力将所有这些重新组合成一个方法调用.

更新使用建议但仍有问题

虽然cfinvoke似乎适用于:

<cfinvoke component="#application.stObj.oNewsBusiness#" method="#local.sMethod#" argumentcollection="#local.stArgs#" returnvariable="local.qData"></cfinvoke>
Run Code Online (Sandbox Code Playgroud)

做以下事情时它不起作用:

<cfscript>
local.stArgs = local.aData[1];
local.sObject = local.aData[2];
local.sMethod = local.aData[3];
</cfscript>
<cfinvoke component="application.#local.sObject#" method="#local.sMethod#" argumentCollection="#local.stArgs#" returnvariable="local.qData"></cfinvoke>
Run Code Online (Sandbox Code Playgroud)

它会产生一个错误:

找不到ColdFusion组件或接口application.stObj.oNewsBusiness

Dan*_*son 7

CFInvoke通常用于处理动态方法调用.

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7e0a.html

CFInvoke有一个argumentcollection属性,因此您可以按照以前的方式传递参数.

  • 我猜这是因为你正在寻找已经实例化的引用,而不是需要从路径实例化的组件.试试这个:<cfinvoke component ="#application [local.sObject]#"method ="#local.sMethod#"argumentCollection ="#local.stArgs#"returnvariable ="local.qData"> </ cfinvoke> (2认同)