2013-02-08 36 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>