【问题标题】:Coldfusion: Need to disable or block "Error invoking CFC - server error" error pop-up messageColdfusion:需要禁用或阻止“Error invoking CFC - server error”错误弹出消息
【发布时间】:2013-02-08 00:29:24
【问题描述】:

我有一个 .cfm 和 .cfc,用于在 .cfm 上的 cfgrid 中编辑数据,它可以工作,但是有 10% 的情况下我会收到以下错误消息:

调用 CFC /test/editCFgrid.cfc 时出错:内部服务器错误

我尝试使用调试建议,但没有成功。

这是 CFM 代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<cfform name="artistform">
            <cfgrid format="html" name="artistgrid" pagesize=11
            striperows="yes" 
            bind="cfc:editCFgrid.getArtists({cfgridpage},{cfgridpagesize},{cfgridsortcolumn},{cfgridsortdirection})"
            delete="yes" insert="yes" selectmode="edit"
            onchange="cfc:editCFgrid.saveArtist({cfgridaction},{cfgridrow},{cfgridchanged})">
                <cfgridcolumn name="firstname" header="First Name" />
                <cfgridcolumn name="lastname" header="Last Name" />
                <cfgridcolumn name="address" header="Address" />
                <cfgridcolumn name="city" header="City" />
                <cfgridcolumn name="state" header="State" />
                <cfgridcolumn name="postalcode" header="Postal Code" />
                <cfgridcolumn name="email" header="Email" />
                <cfgridcolumn name="phone" header="Phone" />
                <cfgridcolumn name="fax" header="Fax" />
                <cfgridcolumn name="thepassword" header="Password" />
</cfgrid>
</cfform>
</body>
</html>

这里是 CFC 代码:

<cfcomponent output="FALSE">
    <cffunction name="getArtists" hint="I extract artists from the database" access="remote" output="FALSE" returntype="struct">
        <cfargument name="page" required="TRUE" hint="the page the grid is on" />
        <cfargument name="pagesize" required="TRUE" hint="records displayed per page" />
        <cfargument name="gridsortcolumn" required="TRUE" hint="selected column to sort" />
        <cfargument name="gridsortdirection" required="TRUE" hint="the sort direction" />
        <cfset var qArtists = "" />

        <cfif arguments.gridsortcolumn eq "">
            <cfset arguments.gridsortcolumn = "lastname" />
            <cfset arguments.gridsortdirection = "asc" />
        </cfif>

            <cfquery name="qArtists" datasource="test_database">
                SELECT *
                FROM Artists
                ORDER BY #arguments.gridsortcolumn# #arguments.gridsortdirection#
            </cfquery>

        <cfreturn QueryConvertForGrid( qArtists, arguments.page, arguments.pagesize ) />
    </cffunction>

    <cffunction name="saveArtist" type="any" hint="I insert, update or delete an artist" access="remote" output="FALSE" returntype="void">
        <cfargument name="gridaction" type="any" required="TRUE" hint="I for insert, U for update and D for delete" />
        <cfargument name="gridrow" type="any" required="TRUE" hint="the rows being inserted or updated" />
        <cfargument name="gridchanged" type="any" hint="the changes" />
        <cfset var qInsertArtist = "" />
        <cfset var qUpdateArtist = "" />
        <cfset var qDeleteArtist = "" />

        <cfif IsStruct( arguments.gridrow ) and IsStruct( arguments.gridchanged )>
            <cfif arguments.gridaction eq "I">
                <cfquery name="qInsertArtist" datasource="test_database">
                    INSERT INTO Artists
                        (firstname, lastname, address, city, state, postalcode, email, phone, fax, thepassword)
                    VALUES
                        (<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.firstname#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.lastname#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.address#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.city#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.state#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.postalcode#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.email#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.phone#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.fax#" />, 
                        <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.gridrow.thepassword#" />)
                </cfquery>

            <cfelseif arguments.gridaction eq "U">
                <cfset var colname = StructKeyList( arguments.gridchanged ) />
                <cfset var value = StructFind( arguments.gridchanged, colname ) />
                    <cfquery name="qUpdateArtist" datasource="test_database">
                        UPDATE Artists
                        SET #colname# = <cfqueryparam value="#value#" />
                        WHERE artistid = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.gridrow.artistid#" />
                    </cfquery>

            <cfelseif arguments.gridaction eq "D">
                <cfquery name="qDeleteArtist" datasource="test_database">
                DELETE FROM Artists 
                WHERE artistid = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.gridrow.artistid#" />
                </cfquery>
            </cfif>
        </cfif>
    </cffunction>
</cfcomponent>

每个功能(编辑、插入、删除等)都有效,但它会随机产生错误。最终,我正在寻找一个可以忽略/阻止/“确定”错误消息的代码,这样用户就不会看到它。

任何帮助将不胜感激!我花了一整天(9 个小时)在谷歌上搜索答案,但我没有找到任何答案。我无权访问 CF 管理日志,我只是一个普通的开发人员。谢谢!

【问题讨论】:

  • 尝试设置您自己的全局错误处理程序 - help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/…
  • 如果投票否决的人解释了为什么他们决定这样做,那就太棒了。简单地投票不是很有帮助。投票支持它,因为一点润色无济于事的问题没有任何问题。
  • 您应该能够通过浏览到错误请求的 URL 看到 实际 错误(完整的 URL 应该显示在 Firebug 网络面板中)。如果做不到这一点,它将在异常日志或应用程序日志或输出日志中,具体取决于我从未完全确定的各种事情。发布实际的错误消息,我们可以弄清楚发生了什么。
  • Here are some tips regarding debugging CFCs。本质上,启用健壮的调试,检查您的日志,使用 cfinvoke 重复调用您的方法并记录这些结果。希望这可以帮助您了解发生了什么。
  • 感谢@AdamCameron 为这个问题投票。这是我从 Firebug 得到的错误:“NetworkError: 500 Server Error - server.com/test/editCFgrid.cfc

标签: data-binding coldfusion cfc server-error cfgrid


【解决方案1】:

Google chrome、firefox 中的 firebug、IE 开发者工具都可以帮到你。

在谷歌浏览器(我的偏好)中,右键单击您的页面 > 检查元素。然后转到网络选项卡。您必须刷新您的网页。然后您将在文件列表中看到您的 cfc(可能是 RED)。右键单击 > 在新选项卡中打开,您将直接打开 cfc,并调用所有参数。然后您应该能够看到您的错误。

没有忽略/阻止/确定。您需要修复错误。

【讨论】:

  • 嗨,史蒂夫...首先,感谢您抽出宝贵时间回复我的问题。尽管它有点帮助,但它不是解决问题的方法。其次,我想纠正你......有一种方法可以忽略/阻止/确定以下脚本“查看下面的解决方案”的问题
【解决方案2】:

可能是超时或 SQL 错误。要获取完整的错误,请使用:cferror,此标记显示完整的调试信息(比调试服务器信息更好)我通过邮件发送给我:

把这个放在你的申请文件上:

<cferror type="exception" template="error.cfm" />
<cferror type="request" template="error.cfm" />

创建一个“error.cfm”文件:

"Error message"
<cfsavecontent variable="errorContent">
<cfoutput>
An error occurred: http://#cgi.server_name##cgi.script_name#?#cgi.query_string#<br />
Time: #dateFormat(now(), "short")# #timeFormat(now(), "short")#<br />

<h2>Error:</h2>
<cfdump var="#error#" label="Error">
<h2>Form:</h2>
<cfdump var="#form#" label="Form">
<h2>URL:</h2>
<cfdump var="#url#" label="URL">
<h2>SESSION:</h2>
<cfdump var="#SESSION#" label="SESSION">

</cfoutput>
</cfsavecontent>

<cfmail to="mail@mymail.com" from="mail@mymail.com" subject="Error on #cgi.server_name#: #error.message#" type="html">
#errorContent#
</cfmail>

【讨论】:

    【解决方案3】:

    有一种方法可以使用以下脚本忽略/阻止/确定“错误”消息:

    <script>ColdFusion.setGlobalErrorHandler(function (error) 
    {mygrid = ColdFusion.Grid.refresh ('artistgrid', false);
    }
    );
    </script>
    

    将此脚本插入到 CFM 文件中,您就可以开始了!因为我遇到的错误没有影响 cfgrid 的功能(编辑单元格)(弹出消息比其他任何东西更令人讨厌)。希望这个解决方案可以帮助其他人!

    你不需要在脚本中使用'Grid.refresh'命令,你可以使用任何你想要的命令。

    感谢所有试图回答我问题的人!

    【讨论】:

    • 您正在掩盖错误。我永远不会向其他程序员推荐这个错误。我很高兴这对你有用,但这是我见过的最糟糕的解决方案。
    • Steve,您未能解决我的编码问题,并理解问题是由于我无法编辑的系统 JS 之间的冲突造成的。冲突不允许我的代码完成它的工作,它只是在编辑单元格后随机弹出一条错误消息,这是不必要的。此外,您没有阅读我的请求,“我正在寻找一个忽略/阻止/“确定”错误消息的代码,因此用户不会看到它”,我的代码符合该需要。您的回答误导我相信没有这样的代码。如果您没有解决方案或帮助的方法,请奉献给其他人。 TY
    猜你喜欢
    • 2018-12-02
    • 2023-03-21
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多