我在ColdFusion中编码,但是试图留在cfscript中,所以我有一个函数允许我传入一个查询来运行它
<cfquery blah >
#query#
</cfquery>
但不知何故,当我构建查询sql = "SELECT * FROM a WHERE b='#c#'" 并将其传入时,ColdFusion已将单引号替换为2个单引号.所以它变成 WHERE b=''c''了最后的查询.
我尝试过很多不同的方法创建字符串,但我不能只留下一个引用.即使进行字符串替换也没有效果.
知道为什么会这样吗?在这个项目期间,它破坏了我在cfscript中生活的希望
我很好奇是否有任何类似于.Net的AppDomain的Java抽象.
特别是,我很好奇,因为我发现使用我们的Coldfusion/J2EE服务器,我们需要每隔几天重新启动它,因为我们还没有能够轻松跟踪内存泄漏.这可能会破坏我们长期运行的流程,而且我们真的想要一种慢慢地将人们推向新JVM的方法,因为他们已经超过了某个时间段/内存阈值.
从我有限的.Net经验来看,我非常肯定这是IIS和AppDomains能够通过回收内存压力下的AppDomain无缝管理的一种情况.如果我在这个场景中帮助AppDomains,请告诉我.
有什么建议?
在ColdFusion中创建结构有什么"简短"的语法吗?我想替换这个冗长的代码:
<cfscript>
ref = StructNew();
ref.Template = "Label";
ref.Language = "en";
stcML = GetPrompts(ref);
</cfscript>
Run Code Online (Sandbox Code Playgroud)
更像是一个JavaScript对象:
<cfscript>
stcML = GetPrompts({ Template: "Label", Language: "en" });
</cfscript>
Run Code Online (Sandbox Code Playgroud)
有这样的事吗?
有没有办法让CF9 ORM将NULL值插入数据库而不是空字符串?
I've got a numeric field which can be null, but throws an error because it's trying to enter ''.
在C#中,我创建了静态方法来帮助我执行简单的操作.例如:
public static class StringHelper
{
public static string Reverse(string input)
{
// reverse string
return reversedInput;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在控制器中,我会通过简单地使用:
StringHelper.Reverse(input);
Run Code Online (Sandbox Code Playgroud)
现在我正在使用ColdFusion和Model Glue,我想做同样的事情.但是,似乎ColdFusion中没有静态方法的概念.如果我像这样创建一个CFC:
component StringHelper
{
public string function Reverse(string input)
{
// reverse string
return reversedInput;
}
}
Run Code Online (Sandbox Code Playgroud)
我是否可以通过StringHelper在控制器中创建实例来调用此方法,如下所示:
component Controller
{
public void function Reverse()
{
var input = event.getValue("input");
var stringHelper = new StringHelper();
var reversedString = stringHelper.Reverse(input);
event.setValue("reversedstring", reversedString);
}
}
Run Code Online (Sandbox Code Playgroud)
或者在某些地方我可以放置"静态"CFC,框架将在后台创建一个实例,这样我就可以使用它,好像它是静态的,有点像helpers文件夹的工作方式?
我有一个test.cfm页面,并希望 从该页面(test.cfm)调用一个<cffunction>名为errorEmailusing 的cfc <cfscript>而不是
<cfinvoke component = "#cfcPath#" method = "errorEmail" returnVariable = "myReturn"
description = "get list of projman">
</cfinvoke>
Run Code Online (Sandbox Code Playgroud)
我试过了:
<cfscript>
errorEmail(cfcPath);
</cfscript>
Run Code Online (Sandbox Code Playgroud) 我在屏幕底部有一个30秒计时器的多人游戏.如果没有一个玩家进行30秒的移动,表单提交.
var ProgressValue = 0;
function showProgress() {
ProgressValue += 100/30;
if (ProgressValue > 100) {
$('form').submit();
}
// Ajax is done here to see if anyone has made a move.
$('.progress .bar').css('width',ProgressValue + '%');
setTimeout(showProgress, 1000);
}
setTimeout(showProgress, 1000);
Run Code Online (Sandbox Code Playgroud)
每一秒,我检查应用程序范围,看看是否有人更改了值
Application.LastMove
Run Code Online (Sandbox Code Playgroud)
我想让进度条平滑动画,但我不想通过减少超时值来实现.我认为检查是否有人每秒都进行一次移动已经足够加载服务器了.
我听说过WebSockets,但是我当前的服务器是在ColdFusion 8上,所以(我认为)我很满意每秒进行一次ajax调用,除非你觉得ajax不那么优雅,而且文明年龄较小.
问:你如何将twitter-bootstrap进度条平滑地从3.3%动画到6.6%?
我想从ColdFusion 10中获取一个URL参数CGI.QUERY_STRING.怎么做没有循环?
我试图在Lucee上的组件上使用合成访问器(虽然这个问题在ColdFusion上似乎也是一样的).
Repro代码:
// Person.cfc
component accessors=true {
property firstName;
property lastName;
function init(firstName, lastName){
variables.firstName = arguments.firstName;
variables.lastName = arguments.lastName;
}
}
Run Code Online (Sandbox Code Playgroud)
和调用代码:
// person.cfm
person = new Person("Abigail", "Bowen");
writeDump(person);
Run Code Online (Sandbox Code Playgroud)
注意我在这里没有使用合成访问器,我纯粹是将参数值设置为同名变量范围的变量.
但是,当我运行此代码时,我看到:

请注意如何填充属性.这没有问题,但我显然不明白accessors旗帜应该如何运作.我认为它只是为了为我(它有)合成一些存取方法,但这就是全部.
另请注意,如果我将CFC定义修改为不将访问器设置为true,则转储显示如下:

因此没有合成访问器(如预期的那样),但现在甚至没有显示属性(使用变量范围值或不具有变量范围值).
我真的不明白"属性"和访问者设置的这种混淆吗?当然,访问者设置应该只影响是否创建了这些访问器方法?
如果我只是在其中一个平台上看到这个,我可能会把它归结为如何writeDump()解释属性定义的变幻莫测.但是ColdFusion 11的行为是一样的,所以看起来我的行为似乎有些不同.
有谁能解释一下?有没有解释它的文档?如果不是......嗯...为什么不呢?
我的基本担忧是,属性值没有"正确"存储,并且一旦我实现了更多的代码,可能会给我带来问题.
更新:至少在ColdFusion上,它似乎只是一个writeDump()行为的改变,因为如果有属性的getter(无论是否accessors设置了标志),那么属性值开始显示在转储中.但是Lucee的情况并非如此,所以那里仍然存在问号.
为了充分披露,这个问题是我在博客上提出的一个问题的摘要(" CFML:试图理解访问者 ").复制是故意的,因为我的博客与本网站的受众不同.
我想创建一个安全的ColdFusion环境,我正在使用多个沙箱配置.使用友好的管理员界面可轻松实现以下任务:
而其他人则相应地使用Web服务器的配置.
所以我对设置感到满意只是为了以后遇到,无论应用于cfexecute标签的限制如何,都可以用来java.lang.Runtime轻松地执行系统文件或脚本;
String[] cmd = {"cmd.exe", 'net stop "ColdFusion 10 Application Server"'};
Process p = Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)
或使用java.lang.ProcessBuilder:
ProcessBuilder pb = new ProcessBuilder("cmd.exe", 'net stop "ColdFusion 10 Application Server"');
....
Process myProcess = pb.start();
Run Code Online (Sandbox Code Playgroud)
问题是我找不到任何允许我禁用这两个类的解决方案:java.lang.Runtime&java.lang.ProcessBuilderfor the createObject().对于注释:我已经在sanbox和os权限中尝试过文件限制,但不幸的是它们似乎只在I/O文件操作上工作,我不能搞乱系统库的安全策略,因为它们可能在内部使用通过ColdFusion.