Model-Glue和Railo Application.cfc

use*_*212 0 coldfusion railo model-glue application.cfc

我正在尝试在Railo上启动测试MG应用程序,并且遇到了障碍.当我访问MG应用程序时,我得到:

Railo 3.1.0.012 Error (Java.lang.classformaterror)
Message         Invalid index 16 in LocalVariableTable in class file
application_cfc$cf
Java Stacktrace

Invalid index 16 in LocalVariableTable in class file application_cfc
$cf
        at java.lang.ClassLoader.defineClass1(Native Method):-2
        at java.lang.ClassLoader.defineClass(ClassLoader.java:621):621
        at java.lang.ClassLoader.defineClass(ClassLoader.java:401):401
        at railo.commons.lang.PhysicalClassLoader.loadClass
(PhysicalClassLoader.java:116):116
        at railo.runtime.PageSourceImpl.compile(PageSourceImpl.java:225):225
        at railo.runtime.PageSourceImpl.loadPhysical(PageSourceImpl.java:167):
167
        at railo.runtime.PageSourceImpl.loadPage(PageSourceImpl.java:102):102
Run Code Online (Sandbox Code Playgroud)

我做了一些测试,发现当Application.cfc中发生以下情况时:

<cfloop from="1" to="#arrayLen(mgInstances)#" index="i">
    <cfset mgInstances[i].executeEvent(arguments.eventName, values) />
</cfloop>
Run Code Online (Sandbox Code Playgroud)

我收到了错误.如果我删除这部分,我开始得到:

Message         Application context not loaded!
Error Code
org.coldspringframework.webApplicationContextProxy.cantLoadApplicationContext
Run Code Online (Sandbox Code Playgroud)

所以,我猜测在Application.cfc中,行:

<cfset var mgInstances = createObject
    ("component","ModelGlue.Util.ModelGlueFrameworkLocator").findInScope
    (appScope) />
Run Code Online (Sandbox Code Playgroud)

失败了.

还有其他人有这个问题吗?有解决方案吗 谢谢!!!

Sha*_*son 5

需要考虑的一件大事:通过CFML语言的历史,它始终是按值传递数组的标准行为,而不是通过引用.从语言的早期开始就存在这种情况,与许多其他编程语言的行为相反,但是从什么时候CF有什么问题违反惯例?(例如,数组以1而不是0开始编号).

另一方面,Railo通过引用而不是值来传递数组作为其默认行为.您可以看到这可能会导致其他框架出现问题.为了解决此兼容性问题,Railo允许您使用cfargument标记的"passby"属性来指定任何param作为值或引用.像这样:

<cfargument name="myArray" type="array" required="true" passby="value" />
Run Code Online (Sandbox Code Playgroud)

当然,这意味着必须为Railo重写一些框架,因为这会破坏与Adobe ColdFusion的完全兼容性.

转移ORM现在完全打破了Railo以及此特定问题的结果,以及Railo和CF8之间的其他行为故障.Model Glue和其他现有的CF框架不会遭遇类似的故障.


小智 5

在Railo 3.1 final(或以下补丁之一)中,我们将在Railo管理员中有一个兼容性选项卡,允许您将passby值设置为Railo中的默认行为.然后,您可以启用此设置,从而使Transfer和ModelGlue III运行良好.这里的旁注是passby属性不会破坏现有的CF代码.它只被视为CFARGUMENT元数据.

我们诚实地将此视为Coldfusion中的错误,但由于兼容性要求,我们将调整此行为并使其在Railo Administrator中可选.

Gert Franz Railo开源