为什么我不能在Coldfusion cftry/cfcatch语句中捕获错误消息?

为什么我不能在Coldfusion cftry/cfcatch语句中捕获错误消息?,coldfusion,error-handling,try-catch,Coldfusion,Error Handling,Try Catch,我有一个表格,我可以上传大量的徽标。我正在验证cftry/cfcatch语句中的文件(空表单字段,错误的扩展名,…) 当我在cftry中发现错误时,我会执行以下操作: <cfthrow type="FileNotFound" message="#tx_settings_app_error_create_first#" /> 我收到的错误消息我指定的消息= <cfthrow type="FileNotFound" message="#tx_settings_apps_err

我有一个表格,我可以上传大量的徽标。我正在验证
cftry/cfcatch
语句中的文件(空表单字段,错误的扩展名,…)

当我在
cftry
中发现错误时,我会执行以下操作:

 <cfthrow type="FileNotFound" message="#tx_settings_app_error_create_first#" />
我收到的错误消息我指定的消息=

 <cfthrow type="FileNotFound" message="#tx_settings_apps_error_dup#" />
因此,当发现重复页面时,我会提醒用户,重新加载完全相同的页面,并
cf中止
,以防止旧页面进一步处理。补丁就是。

(把它从仅仅是一条评论移到了下面)

好的,如果您能够转储它,那么catch肯定会捕获异常,所以不是try/catch不起作用,而是其他原因。请记住,处理将一直持续到catch块之后的请求结束,只有在这之后才会刷新输出缓冲区,并将
alert()
发送到浏览器。在我看来,在您输出警报并继续处理之后,会发生其他错误,导致服务器的错误页面显示。我建议暂时删除错误页面,并关注CF所引发的实际错误

注意:如果要在输出
警报()
后立即停止catch块中的处理,则需要告诉CF,即:使用
。否则,如上所述,它将继续运行

我认为服务器错误页面捕获的异常仍然记录在异常日志中,但我可能错了。您可以始终在
应用程序.cfc中放置
onError()
处理程序,记录发生的任何错误,然后重新显示错误,以便错误页面仍能处理它。这样,你就可以得到关于错误的信息,而投注者仍然可以看到“不错的错误”页面。

(将其从仅仅是一条评论向下移动)

好的,如果您能够转储它,那么catch肯定会捕获异常,所以不是try/catch不起作用,而是其他原因。请记住,处理将一直持续到catch块之后的请求结束,只有在这之后才会刷新输出缓冲区,并将
alert()
发送到浏览器。在我看来,在您输出警报并继续处理之后,会发生其他错误,导致服务器的错误页面显示。我建议暂时删除错误页面,并关注CF所引发的实际错误

注意:如果要在输出
警报()
后立即停止catch块中的处理,则需要告诉CF,即:使用
。否则,如上所述,它将继续运行


我认为服务器错误页面捕获的异常仍然记录在异常日志中,但我可能错了。您可以始终在
应用程序.cfc中放置
onError()
处理程序,记录发生的任何错误,然后重新显示错误,以便错误页面仍能处理它。这样,您就可以获得错误信息,而投注者仍然可以看到漂亮的错误页面。

请发布第二个代码块的确切代码,包括try/catch内容。也请发布准确的错误消息。那么,
cfabort
将停止处理吗?但是我需要提前提醒你,对吗?服务器页面,我无法替换,因为我正在远程位置工作。让我想想我如何“看幕后”…是的,记住CF所做的只是生成一些文本并将其发送到浏览器。。。浏览器才有意义(呈现HTML、执行Javascript等)。因此,当您输出一个
警报时,
,CF只需要一些文本。。。它将继续处理,直到到达请求的末尾(或下一个错误;-),然后将所有内容发送到浏览器,然后执行
警报。所以-是的-输出你的
警报
,然后
.hm。好主意。我需要修补这个,然后自定义错误处理程序就在我的待办事项列表上了。。。所以我会回到这里。谢谢你的发帖。想让它回答吗?好的。我已经把相关的部分移到了一个“答案”中。请发布第二个代码块的确切代码,包括try/catch内容。也请发布准确的错误消息。那么,
cfabort
将停止处理吗?但是我需要提前提醒你,对吗?服务器页面,我无法替换,因为我正在远程位置工作。让我想想我如何“看幕后”…是的,记住CF所做的只是生成一些文本并将其发送到浏览器。。。浏览器才有意义(呈现HTML、执行Javascript等)。因此,当您输出一个
警报时,
,CF只需要一些文本。。。它将继续处理,直到到达请求的末尾(或下一个错误;-),然后将所有内容发送到浏览器,然后执行
警报。所以-是的-输出你的
警报
,然后
.hm。好主意。我需要修补这个,然后自定义错误处理程序就在我的待办事项列表上了。。。所以我会回到这里。谢谢你的发帖。想让它回答吗?好的。我已经把相关的部分移到了一个“答案”中。再次感谢。我会再试一次,看看补丁会把我带到哪里。再次感谢。我会尝试更多,看看补丁会把我带到哪里。
 <cfquery datasource="#Session.datasource#" name="duplicates">
      SELECT a.app_alias 
      FROM apps AS a
      WHERE a.iln = <cfqueryparam value = "#Session.loginID#" cfsqltype="cf_sql_varchar" maxlength="13"> 
      AND a.app_alias = <cfqueryparam value = "#form.app_basic_alias#" cfsqltype="cf_sql_varchar" maxlength="50">
 </cfquery>
 <cfif duplicates.recordcount GT 0>
      <cfthrow type="FileNotFound" message="#tx_settings_apps_error_dup#" />
 </cfif>
<cfif isDefined("send_basic")>
    <cfset variables.timestamp = now()>
    <cfset variables.orderview = "1">

    <cfif form.send_basic_type EQ "new">
    <cftry> 
        <cfif module_check.recordcount GT 0>
            <cfloop query="module_check">
                <cfif module_check.module_name EQ "preorder">
                    <cfset variables.module_name = module_check.module_name>
                    <cfset variables.b2b_preord_ok = "true">
                </cfif>
            </cfloop>
            <cfif form.app_basic_orderview EQ "preo">
                <cfset variables.orderview = "0">
            </cfif>
        </cfif>

        <!--- PROBLEM HERE: DUPLICATES --->
        <cfquery datasource="#Session.datasource#" name="duplicates">
            SELECT a.app_alias 
                FROM apps AS a
                WHERE a.iln = <cfqueryparam value = "#Session.loginID#" cfsqltype="cf_sql_varchar" maxlength="13"> 
                AND a.app_alias = <cfqueryparam value = "#form.app_basic_alias#" cfsqltype="cf_sql_varchar" maxlength="50">
        </cfquery>
        <cfif duplicates.recordcount GT 0>
            <cfthrow type="FileNotFound" message="#tx_settings_apps_error_dup#" />
        </cfif>

        <!--- IF PASS, CREATE/UPDATE --->
        <cfquery datasource="#Session.datasource#">
            INSERT INTO apps ( ... )
            VALUES( ...  )
        </cfquery>
        <cfset variables.app_action = "Applikation erstellt">

        <!--- success --->
        <cfoutput><script type="text/javascript">window.onload = function(){alert("#tx_settings_app_cfm_create#");}</script></cfoutput>

        <cfcatch>
            <cfoutput><script type="text/javascript">window.onload = function(){alert("#tx_settings_app_err_create#");}</script></cfoutput>
        </cfcatch>
    </cftry>
<cfelse>
    <cftry>

        <!--- UPDATE --->
        <cfquery datasource="#Session.datasource#">
            UPDATE apps
                SET   ... = ...
        </cfquery>
        <cfset variables.app_action = "Applikation aktualisiert">
        <!--- success --->
        <cfoutput><script type="text/javascript">window.onload = function(){alert("#tx_settings_app_cfm_update#");}</script></cfoutput>
        <cfcatch>
            <cfoutput><script type="text/javascript">window.onload = function(){alert("#tx_settings_app_err_update#");}</script></cfoutput>
        </cfcatch>
    </cftry>        
</cfif>

</cfif>
 <cfthrow type="FileNotFound" message="#tx_settings_apps_error_dup#" />
<cfif dups.recordcount NEQ 0>
    <cfoutput><script type="text/javascript">window.onload = function(){alert("#tx_settings_apps_error_dup#"); location.href = "hs_apps_detail.cfm?create=newApp&id=none";}</script
    </cfoutput>
    <cfabort> 
</cfif>