标签: cfml

CFML设计模式资源?

与所有开发一样,通过ColdFusion,RailoOpenBD的 CFML 我们遇到了常见的编程问题.对于这些问题,程序员必须转向模式(或反模式).然而,像GOF和现代头版第一本书这样的经典资源都倾向于关注Java.

虽然java本身很漂亮,但是所有三个cfml引擎本质上都是java应用程序,它们表示在编写cfml时,并不是所有甚至许多设计模式都可以或者应该以java方式使用.

我想知道在使用cfml时你发现哪些资源/模式有用?或者您更改了适应java或smalltalk模式以在cfml中使用的内容?

就个人而言,我发现这两个演示文稿都很有趣:

CFMeetup:设计模式和ColdFusion作者:Sean Corfield

设计模式由Cameron Childress 设计

更新:

偶然发现cfdesignpatterns.com,看起来很有希望.

coldfusion design-patterns openbd railo cfml

6
推荐指数
1
解决办法
736
查看次数

查询缓存以支持jQuery自动完成功能

我正在开发一个需要搜索表单上的自动填充字段的应用程序.该应用程序是Railo 3.3上的CFML.我正在使用jQuery UI自动完成,并在服务器端实现了这样的查找:

private struct function getStationDetails(required numeric uic)
{
    var qryCacheStations = new query();
    var qryStations = new query();
    var cacheData = "";
    var resultData = "";
    var stcResult = {};

    qryCacheStations.setDatasource(variables.instance['dataSource']);       
    qryCacheStations.setSQL("select distinct uic, name, crs from stations order by name");
    qryCacheStations.setCachedwithin(createTimeSpan(1,0,0,0));
    cacheData = qryCacheStations.execute().getResult();

    qryStations.setDBType("query");
    qryStations.setAttributes(srcTbl = cacheData);  
    qryStations.setSQL("select name, crs from srcTbl where uic = :uic");

    qryStations.addParam(name="uic",value=arguments.uic,CFSQLType="CF_SQL_INTEGER");

    resultData = qryStations.execute().getResult();

    stcResult = {
        name = resultData['name'][1],
        crs = resultData['crs'][1]
    }

    return stcResult;
}
Run Code Online (Sandbox Code Playgroud)

基本上我在第一次查找时将整个站列表加载到缓存中,1天到期(数据很少更改),然后使用查询查询将相关结果返回给客户端.

我的问题只是这个; 这种激进的缓存和QoQs技术是一个很好的模式吗?性能似乎很好,内存占用很合理(数据集非常小),所以它"感觉"还可以,但我正在寻找那些之前尝试过这些并发现问题的人的建议吗? …

jquery jquery-ui autocomplete railo cfml

6
推荐指数
1
解决办法
516
查看次数

使用Coldfusion在本地测试HTTPS

我想在将其推送到分段和生产之前,在我的本地机器上测试https相关的开发.

目前的网址是:http://localhost:8500/mysite/index.cfm工作正常

如果我尝试将其修改为https,则页面只会加载并加载并且没有任何反应(在chrome中它会显示"此网页不可用"页面)

我搜索了与此相关的信息,但没有发现任何有用的信息.我发现的唯一信息与旧版本的CF有关.从那以后我创建了一个my.keystore文件,但我不知道在CF9中如何处理它.

如果可以提供任何可以帮助我设置/使其工作和测试的信息,我将非常感激.谢谢

coldfusion ssl https coldfusion-9 cfml

6
推荐指数
1
解决办法
2093
查看次数

CFML将evaluate()查询字符串转换为结构语法

下面我有一个循环内的代码,以便将循环迭代我的动态变量设置temp到的值getAdvisor_Advisors.advisor_ID用于当前循环迭代.

<cfset temp = "getAdvisor_Advisors#LoopCount#.advisor_ID">
Run Code Online (Sandbox Code Playgroud)

下面的cfinvoke调用我在动态"temp"变量中传递的查询,但必须使用它周围的慢评估(temp)来获取正确的值.

<cfinvoke component="com.appointments" method="get_All_Appointments" returnvariable="getAppointments">
      <cfinvokeargument name="Advisor_ID" value="#evaluate(temp)#">
      <cfinvokeargument name="StartDay" value="#dateFormat(form.cal,'dd')#">
      <cfinvokeargument name="StartMonth" value="#dateFormat(form.cal,'mm')#">
      <cfinvokeargument name="StartYear" value="#dateformat(form.cal,'yyyy')#">             
</cfinvoke>
Run Code Online (Sandbox Code Playgroud)

我想重写temp变量evaluate()而不使用evaluate.我被告知我可以使用结构语法来引用它,如下所示:

没有评估:

<cfset foo = qBar["text#lang#"][CurrentRow]>
getAdvisor_Advisor["advisor_ID"][CurrentRow]
Run Code Online (Sandbox Code Playgroud)

我该怎么改写

<cfset temp = "getAdvisor_Advisors#LoopCount#.advisor_ID">
Run Code Online (Sandbox Code Playgroud)

使用结构语法?

添加更多代码,以便您可以看到为什么这很复杂,这些是复合循环.

            <cfquery name="getAdvisor_Advisors1" dbtype="query" cachedWithin="#CreateTimeSpan(0,0,15,0)#">
                Select *
                From getAdvisors
                Where Express = 'FR/SO' 
                Order by Specialization, Advisor
            </cfquery>

            <cfquery name="getAdvisor_Advisors2" dbtype="query" cachedWithin="#CreateTimeSpan(0,0,15,0)#">
                Select *
                From getAdvisors
                Where Express = 'JR/SR' 
                Order by Specialization, Advisor
            </cfquery>

            <cfquery …
Run Code Online (Sandbox Code Playgroud)

coldfusion structure cfml

6
推荐指数
1
解决办法
320
查看次数

使用嵌套的cfloop查询

我有2张桌子.一个是类别,第二个是问题.

 category table: 

 category_id
 category_name

 questions table:

 question_name
 question_id
 category_id
Run Code Online (Sandbox Code Playgroud)

如何循环显示所有类别名称并显示在每个类别名称下分组的问题?使用ColdFusion,所以我假设我应该使用<CFLOOP>

结果看起来应该是这样的.

组别

  • 问题1
  • 问题2

产品组别

  • 问题4
  • 问题5

sql sql-server coldfusion cfloop cfml

5
推荐指数
1
解决办法
1798
查看次数

如何将24位PNG保存/转换为8位PNG?

我正在使用Railo中的ImageNew(及相关)创建图像,它使用了JAI.

当我保存图像时,我得到一个24位PNG,但我只需要8位.(只需使用图形编辑器将文件重新保存为8位,就会产生四分之一到一半的字节数.)

ImageWrite没有提供有关PNG位深度的任何功能,我也找不到任何与JAI本身相关的细节(获取http://jai-core.dev.java.net/的DNS错误)

更新:

使用Quantize ImageFilter我可以将颜色数量减少到256 - 这会显着减小文件大小(但仍然没有手动处理),但仍然会产生24位/未调整的PNG文件.不幸的是,它还删除了我需要保留的透明度(或至少重新应用).

如果我通过OptiPNG(一个无损PNG优化器)生成并生成它的文件,它会生成索引的8位文件并削减相当多的字节并提供可接受的文件大小.

所以,这个难题的剩余步骤:如何在ImageFilter删除它之后重新应用透明度(或者更好,防止它被删除).

我想我需要一些方法来做Image.replace('white','transparent')一个基于Railo/Java的解决方案,或者一个跨平台的命令行工具.

java railo jai cfimage cfml

5
推荐指数
1
解决办法
1707
查看次数

Coldfusion RESTful webservice:Object不是声明类的实例

当我调用URL时,http://192.168.2.26:8080/rest/RestSample/season/1.json我收到错误:

"错误","ajp-bio-8012-exec-4","03/01/13","16:51:58","RestSample","对象不是声明类的实例文件的特定顺序包含或处理的是:C:\ path_to\api\service.cfc''"

这是/api/service.cfc文件:

<cfscript>
component restpath="season" rest="true"
{

    remote query function getSeasonsByUserId(numeric userid restargsource="Path") httpmethod="GET" restpath="{userid}"
    {
        var response = "";
        var qry = new Query();
        var userQry = "";

        qry.setSQl("select * from mytable where userID = :userid");
        qry.addParam(name="userid", value="#arguments.userid#", cfsqltype="cf_sql_numeric");
        userQry = qry.execute().getResult();

        if(userQry.recordcount == 0)
        {
            response = userQry;
        } else {
            throw(type="Restsample.SeasonsNotFoundError", errorCode='404', detail='Seasons not found');
        }

        return response;
    }    
}   
</cfscript>
Run Code Online (Sandbox Code Playgroud)

编辑#1:遵循本教程:http: //www.anujgakhar.com/2012/02/20/using-rest-services-in-coldfusion-10/

编辑#2:我的application.cfc

<cfscript>
component output="false" …
Run Code Online (Sandbox Code Playgroud)

rest coldfusion web-services cfml

5
推荐指数
1
解决办法
2239
查看次数

使用cfhttp的addParam方法将标头添加到HTTP请求

我是Coldfusion的新手,无法理解为什么我在使用cfhttp进行的http请求中添加几个标题时遇到了很多麻烦.我正在尝试使用cfscript编写请求,并且从我读过的所有内容中我应该能够简单地执行:

httpService.addParam(type="header", name="Content-Type", value="application/json");
Run Code Online (Sandbox Code Playgroud)

要么

httpService.addParam(type="header", name="Authorization", value=local.authPasscode);
Run Code Online (Sandbox Code Playgroud)

但传出请求似乎不包含这些标头.我可以告诉它不起作用,因为:

  1. 我在回复中遇到错误
  2. 我正在做一个writeDump(GetHttpRequestData()),它显示了请求的所有细节(此输出根本不显示Authorization标头,并将Content-Type标头显示为:

多部分/格式的数据; 边界= ---- WebKitFormBoundaryZs9TyOQV02N3fQop

我似乎也很难以类似的方式添加消息正文,所以我认为我做错了addParam().我是这样尝试的:

httpService.addParam(type="body", value="hello");
Run Code Online (Sandbox Code Playgroud)

同样,我得到的响应有一堆缺失的字段错误,输出writeDump(GetHttpRequestData())显示缺少的正文.

我应该能够以addParam()这种方式使用吗?

完整代码:

    httpService = new http();
    httpService.setMethod("POST");
    httpService.setUrl(application.config.beanstream.postURL);

    local.authPasscode = "Passcode " & ToBase64(application.config.beanstream.merchantid & ":" & application.config.beanstream.APIPasscode, "utf-8");

    // Set headers.

    httpService.addParam(type="header", name="Authorization", value=local.authPasscode);
    httpService.addParam(type="header", name="Content-Type", value="application/json");

    // Construct the message body.

    local.body = {
        "test": "hello"
    };

    httpService.addParam(type="body", value=SerializeJSON(local.body));

    writeDump(GetHttpRequestData());

    local.result = httpService.send().getPrefix();
Run Code Online (Sandbox Code Playgroud)

更新:

好的,所以我把我postURL改为另一个本地页面,在那个页面上,我GetHttpRequestData()用来将方法,协议,标题和内容全部记录到文件中.这是我得到的:

POST
HTTP/1.1 …
Run Code Online (Sandbox Code Playgroud)

coldfusion cfhttp coldfusion-10 cfml

5
推荐指数
1
解决办法
3367
查看次数

Coldfusion:api上的嵌套循环调用Array&Struct

我的函数调用SendGrid API.它返回一个Array +结构.我正在编写一个返回CFQuery数据集的函数.

目标 我想将反序列化的数据对象传递给我的函数并获取查询数据集.

这是我的工作代码和输出:

<cfparam name="variables.ddata" default="#structnew()#">
<!--- API Call Code here --->
<cfset arr = DESerializeJSON(returnStruct.Filecontent) />
<cfdump var="#arr#">
Run Code Online (Sandbox Code Playgroud)

CFdump随叫随到

我的代码:

 <cfset arrayit(arrobj= arr) >
 <cfdump var="#variables.ddata#" >
 <cffunction name="arrayit" access="public" returntype="void">
    <cfargument name="arrobj" type="array"  required="yes">
    <cfset var arr=arguments.arrobj />
    <cfloop from="1" to =   "#arrayLen(arr)#" index="i">
       <cfif isValid("string", arr[i])>
          <cfset StructInsert(variables.ddata, i, arr[i]) />
       </cfif>
       <cfif isstruct(arr[i])>
          <cfset structit(structobj = arr[i]) />
       </cfif>
    </cfloop>
</cffunction>

<cffunction name="structit" access="public" returntype="void" output="yes">
   <cfargument name="structobj" type="any" required="yes">
   <cfset  stru = arguments.structobj …
Run Code Online (Sandbox Code Playgroud)

coldfusion sendgrid coldfusion-10 cfml coldfusion-11

5
推荐指数
1
解决办法
176
查看次数

CF9:这个评估报告的评估是什么?

拜托,我被困住,需要一双清新的眼睛.

我正在和别人的意大利面条代码一起工作,这些代码已经不在了,并且正在弄清楚他们正在评估什么.

<cfset surveyCount = 0>
<cfloop query="surveys">
    <cfif evaluate("defaultReport" & ID)>
        <cfset surveyCount = surveyCount + 1>
    </cfif>
</cfloop>  
Run Code Online (Sandbox Code Playgroud)

在查询转储中,我看到9条记录,这是我所期待的但是因为评估失败,所以surveyCount没有递增.我没有看到任何列defaultReport.在我与CF合作的15年中,我总是避免评估(),现在当我需要分析它时,我完全失去了.有人可以提供任何指导吗?

添加了CFDump图像(为了隐私和安全性,已删除了一些列名称): 在此输入图像描述

更新I:这个文件有很多cfinclude语句和很少的代码格式.结果,我忽略了一些cfinclude语句.我找到了以下内容.我仍然在寻找,但想在我挖掘时记录这一点.

<cfloop query="surveys"> <cfscript> variables["defaultReport" & ID] = evaluate(thisAssociation & "Price"); </cfscript> </cfloop>

更新II:转储变量范围,我确实确认了我正在寻找的变量(找到我在UPDATE中发布的查询,我也帮助了).:)
在此输入图像描述

coldfusion cfdump coldfusion-9 cfml

5
推荐指数
2
解决办法
208
查看次数