如何将cfdiv绑定到维护状态的CFC?

时间:2011-10-07 18:17:19

标签: coldfusion cfc

CFM

<html>

<head>

<title>Test Page</title>

</head>

<body>

    <cfform>
        <cfinput type="text" name="input">
    </cfform>

    <cfscript>
        calc = CreateObject("component", "TestCFC");
    </cfscript>

    <cfdiv bind="cfc:TestCFC.func({input})"></cfdiv>
    <cfdiv bind="cfc:TestCFC.func2()"></cfdiv>


</body>
</html>

CFC

<cfcomponent>
    <cfscript>
        this.output = '';

        remote function func(input){
            output = input;
            return output;  
        }
        remote function func2(){
            return output & ' Hello World.';    
        }
    </cfscript>
</cfcomponent>

输入:

  

第一句话:

预期输出

  

第一句话:

     

第一句话:Hello World。

欢迎解决方法。

1 个答案:

答案 0 :(得分:2)

cfdiv绑定是对CFC的单个请求 - 状态不会在它们之间进行缓存或维护。对VARIABLES等内部共享作用域的访问在请求返回时结束。您必须手动构建/维护此状态。

步骤1:将您的CFC放在与启用SessionManagement的Application.cfc相同的目录中:

<cfset this.sessionManagement = true />
<cfset this.sessionTimeout = createTimeSpan(0,20,0,0) />

步骤2:更改您的CFC,以便在每个请求之间保留的预期变量位于SESSION范围内:

<cfcomponent>

    <cfset session.output = '' />

步骤3:编写函数以便读/写这个有状态范围:

    remote function func(input){
        session.output = arguments.input;
        return session.output;
    }

第4步:

为您的客户提供一种机制,可以跨越DIV链接'onchange'事件。它可以通过多种方式完成,但必须由您完成(这不是自动的) - 最快的出发点是参考您之前关于binding dynamic events to multiple fields的问题。

值得注意的是,使用CFC来封装像SESSION这样的范围应该小心谨慎,尽可能使用保护(即StructKeyExists(SESSION,'output')),因为不同类型的请求(web与服务)调用共享范围的方式不同(或根本没有),您也有时间担心。