首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从cfWindow中获取调试信息?

如何从cfWindow中获取调试信息?
EN

Stack Overflow用户
提问于 2014-06-12 15:03:37
回答 2查看 513关注 0票数 2

我们决定在模态对话框中使用cfWindows。这是不能改变的,所以“使用另一个框架”的回答和评论不会解决这个问题。

虽然我们打开了IP地址的调试,调试信息在普通页面上显示得很好,但cfWindows中没有显示任何内容。今天,我开始尝试重新创建调试信息,并手动将其写入HTML窗口。首先,我在onRequestEnd中使用了以下代码,这些代码在名为“normally”的页面上运行良好:

代码语言:javascript
复制
<cfset tempFactory = createObject("java", "coldfusion.server.ServiceFactory")>
<cfset tempCfdebugger = tempFactory.getDebuggingService()>
<cfset qEvents = tempCfdebugger.getDebugger().getData()>

在花时间按需要格式化输出之后,我终于在cfWindow上尝试了这一点。但是,我在第三行代码中收到了以下错误:

代码语言:javascript
复制
Detail  Its possible that a method called on a Java object created by CreateObject returned null.
ErrNumber   0
Message     Value must be initialized before use.

这意味着,不仅CF设置为不显示cfWindows中的调试信息,而且提供调试信息的cfWindows元素在cfWindows情况下也不起作用。我对底层Java知之甚少,我发布的代码是不久前从CF博客中提取的,所以我不知道如何解决这个问题。

是否有可能获得cfWindow中调用的页面的调试信息?如果是这样的话,是怎么做的?

编辑

为了跟进评论中的建议,我尝试在自己的浏览器窗口中打开CFWindow模板。调试信息显示为正常。然后,我尝试了CFDumping,这是上面列出的三行中每一行的结果。前两项工作。"tempCfdebugger“变量确实包含一个名为"getDebugger()”的函数。问题似乎是当在CFWindow中调用该函数时。服务器必须以某种方式对CFWindow请求进行不同的解释。

除了连接到ServiceFactory之外,是否有其他方法获取此调试信息?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-01 16:20:54

我将奖励斯科特,因为他正确地建议了_cf_nodebug url变量,它解决了最初的问题。然而,我想在这里发布一个更完整的答案。

Scott是正确的,我们可以在cfWindow中通过在调用时将_cf_nodebug=true附加到url来获得完整的调试信息(尽管我不清楚给定变量名称的逻辑)。这解决了最初问题中提到的问题,并且很容易添加到我们的cf_window自定义标记中;非常感谢斯科特。但是,当我们试图从所有cfWindow交互(包括AJAX请求)中获得调试信息时,我对这个问题的措辞很差。这最终是一个两阶段的修复,由_cf_nodebug负责第一阶段。

虽然我们现在能够从cfWindow的初始负载中获得调试信息,但是我们还需要修改cfc来报告查询的详细信息。我找不到允许我们从cfc访问serviceFactory的url变量,但考虑到它是一个cfc,并且本质上只是一个密集的查询集合,我能够向组件中添加以下函数来再现一些所需的功能:

代码语言:javascript
复制
    <cffunction name="debugFunc" access="private" output="yes">
        <cfparam name="session.debugEnabled" default="false">
        <cfif session.debugEnabled>
            <cfoutput>
                <cfsavecontent variable="debugDetails">
                    Recordcount: #Request.getDataQueryResult.recordcount#<br>
                    Execution Time: #Request.getDataQueryResult.ExecutionTime#ms<br>
                    <cfif isDefined('Request.getDataQueryResult.sqlparameters')>
                        Params: #Request.getDataQueryResult.sqlparameters#<br>
                    </cfif>
                    <br>
                    #Request.getDataQueryResult.sql#
                </cfsavecontent>

                <script>
                    parent.cfWindowDebugDivAdd("cfWindow: #url.method#", "#ReplaceList(debugDetails, "#Chr(10)#,#Chr(13)#,""", " ")#");
                </script>
            </cfoutput>
        </cfif>
    </cffunction>

然后,我在cfc中进行了搜索和替换,以修改大约100个cfQuery标记的开头和结尾:

代码语言:javascript
复制
        <cfquery result="Request.getDataQueryResult" ...>
            ...
        </cfquery>
        <cfset debugFunc()>

这会将查询信息存储在请求范围中的一个结构中,然后调用上面的调试函数来编写一些JS,将其传递回父页面。然后,您只需要在父页面上设置一个函数来获取调试信息并将其转储到div、span或浏览器控制台中。如果它对其他人有帮助,下面是我用于测试的代码:

代码语言:javascript
复制
    <div id="cfWindowDebugDiv" style="width:1000px; height:300px; overflow:auto; text-align:left;"></div>

    <script>
        function cfWindowDebugDivAdd(heading, details) {
            $("#cfWindowDebugDiv").append("<b><u>" + heading + "</u></b><br>");
            $("#cfWindowDebugDiv").append(details + "<br><br><br><br>");
        }
    </script>
票数 1
EN

Stack Overflow用户

发布于 2014-06-13 21:13:50

Cfwindow和其他AJAX特性更难调试(不仅仅是ColdFusion AJAX)。对于cfwindow,可以将其添加到URL中:

?cfdebug

更完整的解释是这样做的:

US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec10e40-8000.html

我还建议了解如何使用Firebug。它确实需要一些时间来学习,但对于其他项目(标准的jQuery/AJAX)来说,它将是有用的。值得花时间学习。

您将收到关于此类开发的其他平台/策略的评论。我已经被使用内部、cfinput等功能烧坏了。我发现学习jQuery是痛苦的,但是当我升级到ColdFusion的新版本时,它克服了它带给我的痛苦。我还遇到了一些与cfwindow浏览器兼容的问题。

更新:--我认为通过将代码添加到OnRequestEnd()中,就破坏了CF调用的正常操作。把我的评论读到Ben的博客上,关于我遇到的麻烦(打开这个链接后搜索jibben )。

http://forta.com/blog/index.cfm/2007/6/4/ColdFusion-Ajax-Tutorial-4-Partial-Page-Updates

短版本:使用OnRequestEnd()添加内容输出的将中断calls调用,因为其中许多调用都需要JSON或其他格式化数据。在这个函数中添加一个简单的"hello“将把它附加到数据流中,并破坏预期的格式设置。

我建议将您的调试转储添加到cfwindow在源属性中调用的页面中。

附加说明:,我添加这个是因为它可能会有所帮助。CF有另一个名为_cf_nodebug的URL/查询字符串变量。如果为false,则打开调试输出。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24187769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档