谷歌并没有提供太多内容(或者我的查询很糟糕).有人做过切换并可以分享经验吗?
以下在CFMX 7和CF8中工作正常,我也假设CF9:
<!--- 'conn' is a JDBC connection --->
<cfset stat = conn.createStatement() />
<cfset rs = stat.executeQuery(trim(arguments.sql)) />
<!--- convert this Java resultset to a CF query recordset --->
<cfset queryTable = CreateObject("java", "coldfusion.sql.QueryTable")>
<cfset queryTable.init(rs) >
<cfset query = queryTable.FirstTable() />
Run Code Online (Sandbox Code Playgroud)
这将使用JDBC驱动程序创建一个语句,对它执行查询,将其放入java结果集,然后实例化coldfusion.sql.QueryTable,传递Java resulset对象,然后调用queryTable.FirstTable(),返回实际的coldfusion结果集(用于cfloop等).
问题在于Railo的实施有所不同.在Railo中运行此代码会返回以下错误:找不到匹配的coldfusion.sql.QueryTable(org.sqlite.RS)构造函数.
我已经转储了Railo java对象,并且在方法中没有看到init().我错过了一些简单的事吗?我也很想在Railo工作.
请注意:我正在与SQLite数据库建立无DSN连接.我了解如何设置CF数据源.我在这一点上唯一的打嗝是从Java结果集转换为Railo查询.
(这是一个冷血问题)
我有两个不同的结构,可能包含或不包含相同的数据,我希望能够看到它们是否存在!我的结构将始终包含简单值(数字,字符串或布尔值),因为它们是使用DeserializeJSON创建的,所以希望这可以轻松完成.
我在这里发现了Ben Nadel的帖子,但这种技术似乎对我不起作用.这是我到目前为止所尝试的(其中有一些cfwheels代码):
itemA = DeSerializeJSON(model("itemsnapshot").findByKey(4).json);
itemB = DeSerializeJSON(model("itemsnapshot").findByKey(5).json);
StructDelete(itemA,"updatedAt");
StructDelete(itemB,"updatedAt");
StructDelete(itemA,"createdAt");
StructDelete(itemB,"createdAt");
writedump(itemA);
writedump(itemB);
out = itemA.Equals(itemB);
writedump(out);
Run Code Online (Sandbox Code Playgroud)
结果如下:
Struct
code string C112
companyid number 1
cost number 5000
deletedAt string
description string Nightstand
id number 70634
itemtypeid string 13
projectid number 8
unittypeid string
Struct
code string C112
companyid number 1
cost number 5000
deletedAt string
description string Nightstand
id number 70634
itemtypeid string 13
projectid number 8
unittypeid string
boolean false
Run Code Online (Sandbox Code Playgroud)
因此,正如您将在上面看到的那样,尽管Structs中的数据看起来完全匹配,但它们不会通过Equals()测试.
还有其他人成功完成了吗?
最终编辑:已解决,将本地开发升级到railo 3.3.4.003解决了这个问题.
我必须RC4加密一些字符串并让它们base64编码,我遇到了相同的输入将在2个不同的开发设置上生成不同输出的情况.
例如,如果我test2@mail.com
在一台机器(DEV-1)上有一个字符串,我会得到:DunU+ucIPz/Z7Ar+HTw=
另一台(DEV-2)它将是:DunU+ucIlZfZ7Ar+HTw=
首先,我是rc4通过这里找到的函数加密它.接下来我将它喂给:toBase64( my_rc4_encrypted_data, "iso-8859-1")
据我所知,rc4加密输出在两者上是相同的(或者我遗漏了一些东西).以下是来自两台机器的SERVER变量以及加密功能.
这是我们必须忍受的东西,还是我能做些什么来"正确处理"(因为缺少一个更好的词).我担心将来这会咬我,并想知道它可以避免.
编辑1: my_rc4_encrypted_data.getBytes()的输出返回:dev-1:
Native Array (byte[])
14--23--44--6--25-8-63-63--39--20-10--2-29-60
Run Code Online (Sandbox Code Playgroud)
DEV-2:
Native Array (byte[])
14--23--44--6--25-8-63-63--39--20-10--2-29-60
Run Code Online (Sandbox Code Playgroud)
(没有编码传递给getBytes())
DEV-1(远程)
server.coldfusion
productname Railo
productversion 9,0,0,1
server.java
archModel 64
vendor Sun Microsystems Inc.
version 1.6.0_26
server.os
arch amd64
archModel 64
name Windows Server 2008 R2
version 6.1
server.railo
version 3.3.2.002
server.servlet
name Resin/4.0.18
Run Code Online (Sandbox Code Playgroud)
DEV-2(本地)
server.coldfusion
productname Railo
productversion 9,0,0,1
server.java
vendor Oracle Corporation
version 1.7.0_01
server.os …Run Code Online (Sandbox Code Playgroud) 我有一个来自jQuery应用程序的JSON变量输出,如下所示:
[{"id":1},
{"id":197,"children":[{"id":198},{"id":199},{"id":200}]},
{"id":2,"children":[{"id":3},{"id":4},{"id":143},{"id":6},{"id":5},{"id":7},{"id":8},{"id":9},{"id":10},{"id":11},{"id":12}]},
{"id":15,"children":[{"id":17},{"id":190},{"id":191},{"id":131},{"id":16},{"id":142},{"id":124}]},
{"id":149,"children":[{"id":150},{"id":160},{"id":161},{"id":184}]},
{"id":20,"children":[{"id":132},{"id":127},{"id":152},{"id":107},{"id":108},{"id":109},{"id":110},{"id":125},{"id":128},{"id":130},{"id":129},{"id":112}]},
{"id":162,"children":[{"id":163},{"id":164},{"id":165},{"id":166},{"id":186},{"id":187}]},
{"id":167,"children":[{"id":173},{"id":168},{"id":170},{"id":169},{"id":192},{"id":194}]},
{"id":174,"children":[{"id":176},{"id":175},{"id":188}]},
{"id":153,"children":[{"id":178},{"id":179},{"id":195},{"id":154},{"id":157}]},
{"id":180,"children":[{"id":181},{"id":182},{"id":183},{"id":189}]},
{"id":122},
{"id":21},
{"id":13},
{"id":92},
{"id":22},
{"id":113},
{"id":114}]
Run Code Online (Sandbox Code Playgroud)
我需要将此变量转换为结构,然后通过第一个id参数循环结构以查找每个结构的子项id(如果有的话).我试图将其转换为类似的结构,但我收到一个错误:
<cfset jsonarray = deserializeJson(output)>
<cfloop collection="#jsonarray#" index="id">
<cfdump var="#jsonarray[id]#">
</cfloop>
Run Code Online (Sandbox Code Playgroud)
它不会将变量识别为结构:
Invalid collection [{id={1}}, {children={[{id={198}}, {id={199}}, {id={200}}]},id={197}}, {children={[{id={3}}, {id={143}}, {id={4}}, {id={6}}, {id={5}}, {id={7}}, {id={8}}, {id={9}}, {id={10}}, {id={11}}, {id={12}}]},id={2}}, {children={[{id={17}}, {id={190}}, {id={191}}, {id={131}}, {id={16}}, {id={142}}, {id={124}}]},id={15}}, {children={[{id={150}}, {id={160}}, {id={161}}, {id={184}}]},id={149}}, {children={[{id={132}}, {id={127}}, {id={152}}, {id={107}}, {id={108}}, {id={109}}, {id={110}}, {id={125}}, {id={128}}, {id={130}}, {id={129}}, {id={112}}]},id={20}}, {children={[{id={163}}, {id={164}}, {id={165}}, {id={166}}, {id={186}}, …Run Code Online (Sandbox Code Playgroud) 我有一个您登录的网页,然后创建一个会话变量,该变量在所有后续页面访问中检查,如果它不存在或与记录的会话ID不匹配,则会被踢出页面.
代码在这里:
Application.cfm会话设置:
<CFAPPLICATION NAME="myAPP" APPLICATIONTIMEOUT="#CREATETIMESPAN(0,0,60,0)#" sessionTimeout=#CreateTimeSpan(0, 0, 20, 0)# sessionManagement="Yes">
Run Code Online (Sandbox Code Playgroud)
检查会话变量集:
<CFLOCK TIMEOUT="30" THROWONTIMEOUT="no" TYPE="Exclusive" Scope="session">
<CFSET session.started = #ucase(dbGUID)#>
</CFLOCK>
Run Code Online (Sandbox Code Playgroud)
现在,该页面还通过JQuery的load()方法每隔几秒将数据加载到不同的DIV中,来自不同的后端页面.对于一些完全没有问题的人来说这一切都很好,但是有些人可以在几分钟到几个小时内完成任何工作,然后突然Lucee会生成一个新的会话,导致数据加载回主页面强制主页刷新,以便您可以重新登录.然而,发生的情况是页面刷新并且原始会话仍然实际存在,因此然后再次使用,然后该人员能够再次看到页面数据.对于某些人而言,这可能会发生很多次,而对于其他人则不会.
我确信这不是个人的,因为在同一个人的不同PC上尝试它对一些人来说是好的,而对其他人则没有.直接在Web服务器上尝试(带有指向本地的域的hosts文件),它没有问题.它似乎不是负载均衡器,因为它在负载均衡器上下都会发生.为了清楚起见,它不是导致新会话的1个特定页面,它可能是任何正在使用的页面,它也不是由于第一次尝试访问页面而导致的,因为它可能在访问之前被访问了几十次正在生成新会话.它也不是超时,因为会话超时设置为20分钟,但它可能在原始会话设置的一分钟内发生.
问题是为什么Lucee突然决定创建一个新会话(旧的会话仍然存在),我怎么能阻止它和/或让它再次使用原始会话返回.
我有一个表格,其格式有很多字段
在表单操作页面上,我希望能够使用循环并能够使用循环的索引来连接像这样的字符串前缀<cfset newField = "field-" & #index#>,然后使用它#Variables.newField#来访问上一页上的表单字段.
我一直在玩这个Evaluate()功能,但没有运气.我不太多使用ColdFusion,所以我可能只是稍微偏离语法.
我如何使用它的一个例子是:
<cfset newField = "form.field-" & #index#>
<input type="hidden"
name="field-<cfoutput>#index#</cfoutput>"
value="<cfoutput>Evaluate(Variables.newField)</cfoutput>">
Run Code Online (Sandbox Code Playgroud) 什么是正确的方法?我认为两者都有效,但我想知道是否有好处.
<CFFUNCTION name="setSomething" access="public" output="no" returntype="void">
<CFSET ... />
</CFFUNCTION>
Run Code Online (Sandbox Code Playgroud)
要么
<CFFUNCTION name="setSomething" access="public" output="no" returntype="void">
<CFSET ... />
<CFRETURN />
</CFFUNCTION>
Run Code Online (Sandbox Code Playgroud) 在中午IIS服务器运行正常,当我重新启动它时显示我的错误
服务临时不可用!
由于维护停机或容量问题,服务器暂时无法为您的请求提供服务.请稍后再试.
雅加达/ ISAPI/isapi_redirector/1.2.32()
有人知道如何解决这个问题吗?
它只是运行正常,没有改变连接器和IIS的任何东西.
谢谢你得到的答案.我需要重新启动Coldfusion,IIS和托管PC本身来修复它.它不会再出错了谢谢!
在PHP中我可能遇到这种情况:
<?php
class Person {
public $firstName;
public $lastName;
function __construct($firstName, $lastName)
{
$this->firstName = $firstName;
$this->lastName = $lastName;
}
function __toString()
{
return "{$this->firstName} {$this->lastName}";
}
}
echo new Person("Adam", "Cameron"); // Adam Cameron
Run Code Online (Sandbox Code Playgroud)
(可运行的演示)
我可以发誓在CFML中有一个等价物,例如:
// Person.cfc
component {
function init(id, firstName, lastName){
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
}
function toString(){
return "#this.firstName# #this.lastName#";
}
}
// test.cfm
writeOutput(new Person("Adam", "Cameron"));
Run Code Online (Sandbox Code Playgroud)
我认为这对CF11或CF2016来说是新的.
但这不行.我知道我可以做客户序列化服务器,但这不适合这里.
我也知道我可以通过其他各种方式实现相同的目标,但这不是问题.我特别要求能够实现一个toString方法或类似的方法,以便能够指定如何将对象表示为字符串.
我错误记得CFML,还是我做错了什么?