以下在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查询.
我正在使用Java 1.7在Mac OS X 10.8上使用Jetty 8在Railo 4.0.2.002 Express中运行传统CF Fusebox 5.5应用程序.我也在使用jetty urlrewrite http://tuckey.org/urlrewrite/(如果那是相关的)
为什么FORM在提交表单时范围始终为空?但是,如果我使用URL范围,它工作正常.
该应用程序在所有其他版本的CF中运行良好,也应该在这里工作正常.
更新1:
此外,当我在onRequestStart内部Application.cfc并且我转储FORM范围时它也是空的.
有人有这个问题吗?我不认为它必然是"fusebox"所以我想知道它是否是一个Railo 4兼容性问题?
更新2:
当表单发布到/admin/index.cfm?event=Main.Login时
,表单范围工作正常.但是当它发布到/admin/event/Main.Login时,表单范围就消失了.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite
PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
"http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
<urlrewrite>
<rule>
<from>^/admin/event/(.*)</from>
<to last="false">/admin/index.cfm?event=$1</to>
</rule>
<rule>
<from>^/lms/event/(.*)</from>
<to last="false">/lms/index.cfm?event=$1</to>
</rule>
</urlrewrite>
Run Code Online (Sandbox Code Playgroud)
更新3:
还应该注意到Charles(代理)正确检测到'POST'请求包含电子邮件/密码和其他正确发送到服务器的表单元素.
Jetty服务器根本没有看到它们或没有正确地将它们转发到Railo引擎或其他东西?
更新4:
这是他们告诉你放入你的tuckey配置web.xml.其实我放在这个在webdefault.xml中etc/Railo快速的目录,我想可能只是码头的文件.
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud) 我正在将一个非常古老的应用程序(目前在CF8中运行)迁移到Lucee.但是我遇到了一个似乎是某种自定义标签的问题.
我已经尝试确保旧安装和新安装的IIS中的所有虚拟目录都相同.并确保CFIDE和Lucee Admin中的映射和自定义标记路径相同.
但是我收到了这个错误.并且无法弄清楚这cflink是如何被实例化的.
我很长时间没有使用自定义标签,但认为它们通常用下划线调用,代码应该更像是<cf_link pageid="#LinkPageID#" Init="start">如果它被称为自定义标签.
如果我去运行此应用程序的当前CF服务器,我可以发现已创建cfclass文件
在名为"tags"的目录中名为cflink.cfm的文件中,即使"tags"目录似乎没有映射,也不在管理员的"自定义标记路径"下列出.
这个应用程序是从2003年开始的,你可以想象已经发展成为意大利面条代码的不匹配,从一开始就没有人问这个标签是如何实例化的.
有遗留代码经验的人是否有任何其他想法,我应该尝试让它工作?目前只有一个生产环境,如果我能让它在Lucee上工作,它不仅是一个在10年内不存在的开发环境,而且对我来说能够继续展示Lucee是一个很好的方式一个伟大的CFML引擎
添加附加信息
Leigh曾询问init是否可能是jar引用,但是在cflink.cfm文件中我看到了这段代码:
<cfif Attributes.Init IS "start">
<cfset Request.PageID = Attributes.PageID>
<cfset Request.Page_Width = Variables.qParentInfo.Page_Width>
<cfset Request.Page_Height = Variables.qParentInfo.Page_Height>
<cfset Request.Page_TypeID = Variables.qParentInfo.Page_TypeID>
<cfset Request.AddPath = "">
<cfif IsDefined("Attributes.Anchor")>
<cfset Request.Anchor = Attributes.Anchor>
<cfelse>
<cfset Request.Anchor = "">
</cfif>
<cfset Request.IsInternalLink = false>
<cfexit method="EXITTAG">
</cfif>
Run Code Online (Sandbox Code Playgroud)
在tags\cflink.cfm中的代码中也引用了cflink
<cfif Len(Variables.qParentInfo.ParentID) GT 0>
<!--- Add the page title to the end of the path --->
<cfset Request.AddPath …Run Code Online (Sandbox Code Playgroud) 与所有开发一样,通过ColdFusion,Railo或OpenBD的 CFML 我们遇到了常见的编程问题.对于这些问题,程序员必须转向模式(或反模式).然而,像GOF和现代头版第一本书这样的经典资源都倾向于关注Java.
虽然java本身很漂亮,但是所有三个cfml引擎本质上都是java应用程序,它们表示在编写cfml时,并不是所有甚至许多设计模式都可以或者应该以java方式使用.
我想知道在使用cfml时你发现哪些资源/模式有用?或者您更改了适应java或smalltalk模式以在cfml中使用的内容?
就个人而言,我发现这两个演示文稿都很有趣:
CFMeetup:设计模式和ColdFusion作者:Sean Corfield
和
更新:
偶然发现cfdesignpatterns.com,看起来很有希望.
我正在开发一个应用程序,它创建并存储与应用程序范围中的本地XMPP服务器的连接.连接方法存储在cfc中,以确保Application.XMPPConnection在每次使用时都已连接并授权,并利用连接向用户发送实时事件.据我所知,这工作正常.但它没有在任何压力下进行测试.
我的问题是:这个设置会在以后引起问题吗?我只是问,因为我找不到其他人以这种方式使用Application变量的证据.如果我不使用railo,我将使用CF的事件网关来完成相同的任务.
我想将我的所有CFC放入/ components文件夹,并能够从应用程序中的不同位置调用它们,例如.来自/forums/index.cfm.
我该如何设置映射?
我有一个在MySQL本地运行的站点我想在H2数据库上运行它.我刚刚在浏览器上运行控制台的h2.jar文件,但每当我登录时,我已经看到了列表,jdbc:h2:/var/www/mysite/data/db; MODE=MySQL, information_schema and users.我可以在其中创建表但不知道如何创建新数据库?
我在嵌入模式下使用Mode = MySQL type = H2 Database Engine.
使用此代码:
<cfset foo = {}>
<cfset exists1 = !isDefined("foo.foo")>
<cfset exists2 = isNull(foo.foo)>
<cfset exists3 = isNull(foo['foo'])>
Run Code Online (Sandbox Code Playgroud)
Railo传递ok(全部为True),而CF在最后一行抛出异常.
coldfusion.runtime.UndefinedElementException:元素foo在作为表达式一部分引用的CFML结构中未定义.
我一直认为CFML中的点符号和方括号表示法应该在功能上等同,只有方括号可以定义区分大小写的键.
我在这里报告的一个错误最近被标记为"NotABug".
有人可以解释原因吗?
我有这个代码:
<cfdump eval=server>
Run Code Online (Sandbox Code Playgroud)
它输出的顶级键coldfusion,java,lucee,os,separator,servlet.请注意,railo那里没有列出.
但是,如果我这样做:
<cfdump eval=server.railo>
Run Code Online (Sandbox Code Playgroud)
然后它输出运行Railo服务器时可能期望的通常结构(而不是Lucee服务器).
那是怎么回事?
我有一些代码可以在Railo下运行,但我正试图让这个特定的应用程序在CF10和CF11上工作
这是一个cfWheels应用程序,我BCrypt.class在/miscellaneous/目录中有一个文件.
在我的/events/onapplicationstart.cfm档案中,我有:
application.bCrypt = CreateObject( "java", "BCrypt", "/miscellaneous/" );
Run Code Online (Sandbox Code Playgroud)
这适用于Railo; 但在CF11中我得到了
The java object type is unknown for the CreateObject function.
Verify the type of your object when creating it and try again.
Valid Types are : component | java | webservice | dotnet | com | corba | .NET
The error occurred in /Volumes/Documents/blah/public/events/onapplicationstart.cfm: line 8
Called from /Volumes/Documents/blah/public/wheels/global/cfml.cfm: line 111
Called from /Volumes/Documents/blah/public/wheels/events/onapplicationstart.cfm: line 388
6 :
7 : // BCrypt …Run Code Online (Sandbox Code Playgroud)