coldfusion - 在 ColdFusion 10 的自定义标签中使用 CFThread 时出现未定义错误

标签 coldfusion custom-tag coldfusion-10 cfthread

注意:我已经完全重写了这个问题以考虑新信息。如果您已经阅读过此内容,请重读。

我在使用 cfthread 时遇到错误来自 ColdFusion 10 中的自定义标记。在应用程序日志中,我得到以下条目:

Variable _cffunccfthread_cfThreadTag2ecfm16902001291 is undefined.

它作为错误返回的函数的名称是 _cffunccfthread_cf[Page Name Calling the CFThreadTag]然后是一个不会因请求而改变的数字。我每次都可以使用以下代码复制此内容:

Application.cfc:

component
{
    this.name = "CFThreadCustomTagTest";
}

ThePage.cfm:

<cfthread action="run" name="ThreadTestInPage">
    <cflog log="Application" text="The thread in the page successfully ran" type="information" />
</cfthread>
<cf_ThreadTag />

ThreadTag.cfm:

<cfif thisTag.ExecutionMode EQ "start">
    <cfthread action="run" name="ThreadTest">
        <cflog log="Application" text="The thread within the tag successfully ran" type="information" />
    </cfthread>
</cfif>

只需将所有三个文件放入 ColdFusion 10 的目录中并加载 ThePage.cfm。我在应用程序日志中收到以下条目:

"Severity","ThreadID","Date","Time","Application","Message"
"Information","ajp-bio-8012-exec-1","06/19/12","07:18:11",,"C:\ColdFusion10\cfusion\logs\application.log initialized"
"Information","cfthread-11","06/19/12","07:18:15","CFTHREADCUSTOMTAGTEST","The thread in the page successfully ran"
"Error","cfthread-9","06/19/12","07:18:15",,"THREADTEST: Variable _cffunccfthread_cfThreadTag2ecfm16902001291 is undefined. "

我还注意到,在自定义标记内的线程错误中,它包含应用程序名称。而页面中线程的日志条目却如此。请注意,错误行只有 ,,对于日志的应用程序列,而成功的线程有 "CFTHREADCUSTOMTAGTEST" .

如果我改变ThreadTag.cfm等待标记内的线程完成处理,然后一切正常,并且我按照预期在日志中得到了两个条目:

<cfif thisTag.ExecutionMode EQ "start">
    <cfthread action="run" name="ThreadTest">
        <cflog log="Application" text="The thread within the tag successfully ran" type="information" />
    </cfthread>
    <cfthread action="join" name="ThreadTest" timeout="10" />
    <cfdump var="#cfthread#">

</cfif>

为了验证任何地方都没有时髦的设置,这是我的 local development environment's settings summary .

所以看来,如果我只是将线程扔在那里,而不等待它完成,那么线程似乎正在从父页面中寻找不再在内存中的东西。至少这是我完全没有根据的猜测:)。

我还向 Adob​​e 提交了一个错误。 Bug number 3218452 .

最佳答案

我理解您的困境,但这里没有实际的问题

基本上你已经发现了 CF 中的一个错误。有些人(包括我自己)可以复制它。

没有人遗漏任何东西,除了 Adob​​e 工程师,他们在实现 CF10 时错过了在回归测试中包含此类内容。这并不是对他们的控诉,真的,因为我认为这也许是相当极端的情况?

CF 找不到的“变量”实际上是 CF 编译器在编译代码时生成的编译类的名称。对我来说似乎存在编译器错误。

例如,我的错误是这样的: THREADTEST: Variable _cffunccfthread_cfThreadTag2ecfm13713410591 is undefined.

但是编译后的类是: cfThreadTag2ecfm1371341059$func_CFFUNCCFTHREAD_CFTHREADTAG2ECFM13713410591.class

我不知道该变量应该命名为类名的哪一部分,但我怀疑它应该寻找 func_CFFUNCCFTHREAD_CFTHREADTAG2ECFM13713410591 。或者另一方面,编译器不应该将 ThreadTag.cfm 文件编译为函数?但我猜测......它可能需要将线程代码编译为函数,以便在单独的线程中调用它?这是一个猜测。无论哪种方式:它都会将代码编译为一件事,然后寻找不同的东西。因为一个错误。

但底线是:是的,您发现了一个错误。您已向 Adob​​e 标记了它。我不知道你在这里还能做什么?

所以基本上我们现在知道一个人不能拥有 <cfthread>调用自定义标签(我也通过 <cfmodule> 进行了测试:同样的问题)。您将不得不以不同的方式编写代码,使用包含或方法或其他东西。我知道不太理想,但是你能做什么?

脚注: 我查看了编译后的代码,看起来问题是 CF 正在用 func_ 编译类。前缀,但它在代码中引用它时没有。我没有完全按照代码来检查正在发生的所有事情,但在我看来,好像有引用它试图加载 _cffunccfthread_cfThreadTag2ecfm13713410591而不是正确的名称:func_CFFUNCCFTHREAD_CFTHREADTAG2ECFM13713410591.class .

关于coldfusion - 在 ColdFusion 10 的自定义标签中使用 CFThread 时出现未定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11089901/

相关文章:

java - 在自定义 Javadoc taglet 中展开内联标签

javascript - 如何使用 jQuery 获取自定义标签的值

date - 为什么 ColdFusion 使用相同的函数以不同的方式格式化日期

coldfusion - Coldfusion 循环的奇怪行为?

javascript - Coldfusion Websockets "User is typing..."功能

coldfusion - ColdFusion 有哪些问题?

java - cfhttp : the trustAnchors parameter must be non-empty

coldfusion - 更好地管理 Coldfusion 组件 (CFC) 功能

java - 另一个自定义标签内的 JSP 自定义或 JSTL 标签

url - 是否可以使用 ColdFusion 重写 url?