2013-02-08 41 views
0

我有一个.cfm和.cfc,我正用它来编辑.cfm上的cfgrid中的数据,然而10%的时间我会收到以下错误信息:Coldfusion:需要禁用或阻止“错误调用CFC - 服务器错误”错误弹出消息

错误援引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管理日志,我只是一个普通的开发人员。谢谢!

+0

尝试设置您自己的全局错误处理程序 - http://help.adobe.com/zh_CN/ColdFusion/9.0/CFMLRef/WS0ef8c004658c1089-6262c847120f1a3b244-7fcc.html – Henry

+0

它真的很棒*如果谁投了票这解释了为什么他们决定这么做。简单的投票并不是很有帮助。投票支持,因为没有什么错误的问题,一点波兰不会帮助。 –

+0

只需浏览错误请求的URL即可看到* actual *错误(完整的URL应显示在Firebug网络面板中)。否则,它将在异常日志或应用程序日志或日志中取决于我从未完全确定的各种事情。发布实际的错误消息,我们可以确定发生了什么。 –

回答

0

有忽略/块/ OK “错误” 与下面的文字讯息的方式:

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

将这个脚本插入CFM文件中,你很好走!因为我遇到的错误并未影响cfgrid的函数(编辑单元格)(弹出消息比其他任何东西都更加麻烦)。希望这个解决方案能够帮助其他人!

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

谢谢大家谁试图回答我的问题!

+1

您正在屏蔽错误。我绝不会向另一位程序员推荐这个错误。我很高兴这对你有用,但这是我见过的最糟糕的解决方案。 – steve

+0

Steve,你没有解决我的编码问题,并明白这个问题是由于我无法编辑的系统JS之间的冲突。冲突不允许我的代码执行它的工作,它只是在编辑单元格后随机弹出一个错误消息,这是不必要的。此外,你没有阅读我的请求,“我正在寻找一个代码,将忽略/阻止/”确定“错误消息,以便用户不会看到它”,我的代码符合需要。你的回答误导我相信没有这样的代码。如果您没有解决方案或帮助方法,请专心致志。 TY – Enchauva

1

谷歌浏览器,firefox中的firefox,IE开发者工具都可以帮助你。

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

有没有忽略/块/好。您需要修复错误。

+0

您好Steve ...首先,感谢您花时间回复我的问题。尽管这有点帮助,但这不是解决问题的办法。其次,我想纠正你......有一种方法可以忽略/阻止/使用以下脚本'查看我的解决方案以下'的问题' – Enchauva

0

也许是超时或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="[email protected]" from="[email protected]" subject="Error on #cgi.server_name#: #error.message#" type="html"> 
#errorContent# 
</cfmail>