Used inside a cftry
tag. Together, they catch and process exceptions in ColdFusion pages. Exceptions are events that disrupt the normal flow of instructions in a ColdFusion page, such as failed database operations, missing include files, and developer-specified events.
<cfcatch type = "exceptiontype">
Exception processing code here
</cfcatch>
cftry
, cferror
, cfrethrow
, cfthrow
,
onError; Handling Errors in ColdFusion MX Developer's Guide
ColdFusion MX:
cfcatch
tag depends on the database driver type:
If your application depends on SQLSTATE values for flow control, the application might produce unexpected behavior with ColdFusion MX.
type="any"
: it is not necessary, when you include a cfcatch
tag with type="any"
, to do so in the last cfcatch
tag in the block, to ensure that all other tests are executed before it. ColdFusion finds the best-match cfcatch
block.
cfscript
tag: it includes try
and catch
statements that are equivalent to the cftry
and cfcatch
tags.
cfcatch
.
cfcollection
, cfindex
, and cfsearch
tags can throw the SEARCHENGINE exception. In earlier releases, an error in processing these tags threw only an UNKNOWN exception.
Attribute | Req/Opt | Default | Description |
---|---|---|---|
type |
Optional |
Any |
|
You must code at least one cfcatch
tag within a cftry
block. Put cfcatch
tags at the end of a cftry
block. ColdFusion MX tests cfcatch
tags in the order in which they appear. This tag requires an end tag.
If type="any"
, ColdFusion MX catches exceptions from any CFML tag, data source, or external object. To get the exception type use code such as the following:
#cfcatch.type#
Applications can use the cfthrow
tag to throw developer-defined exceptions. Catch these exceptions with any of these type
options:
"
custom_type
"
"Application"
"Any"
The custom_type
type is a developer-defined type specified in a cfthrow
tag. If you define a custom type as a series of strings concatenated by periods (for example, "MyApp.BusinessRuleException.InvalidAccount
"), ColdFusion MX can catch the custom type by its character pattern. ColdFusion MX searches for a cfcatch
tag in the cftry
block with a matching exception type, starting with the most specific (the entire string), and ending with the least specific.
For example, you could define a type as follows:
<cfthrow type = "MyApp.BusinessRuleException.InvalidAccount">
If you have the following cfcatch
tag, it will handle the exception:
<cfcatch type = "MyApp.BusinessRuleException.InvalidAccount">
Otherwise, if you have the following cfcatch
tag, it will handle the exception:
<cfcatch type = "MyApp.BusinessRuleException">
Finally, if you have the following cfcatch
tag, it will handle the exception:
<cfcatch type = "MyApp">
You can code cfcatch
tags in any order to catch a custom exception type.
If you specify type = "Application"
, the cfcatch
tag catches only custom exceptions that have the Application
type in the cfthrow
tag that defines them.
The cfinclude
, cfmodule
, and cferror
tags throw an exception of type = "template"
.
An exception that is thrown within a cfcatch
block cannot be handled by the cftry
block that immediately encloses the cfcatch
tag. However, you can rethrow the currently active exception with the cfrethrow
tag.
The cfcatch
variables provide the following exception information:
cfcatch variable | Content |
---|---|
cfcatch.type |
Type: Exception type, as specified in |
cfcatch.message |
Message: Exception's diagnostic message, if provided; otherwise, an empty string; in the |
cfcatch.detail |
Detailed message from the CFML interpreter or specified in a |
cfcatch.tagcontext |
An array of tag context structures, each representing one level of the active tag context at the time of the exception. |
cfcatch.NativeErrorCode |
Applies to |
cfcatch.SQLState |
Applies to |
cfcatch.Sql |
Applies to |
cfcatch.queryError |
Applies to |
cfcatch.where |
Applies to |
cfcatch.ErrNumber |
Applies to |
cfcatch.MissingFileName |
Applies to |
cfcatch.LockName |
Applies to |
cfcatch.LockOperation |
Applies to |
cfcatch.ErrorCode |
Applies to |
cfcatch.ExtendedInfo |
Applies to |
You can specify the following advanced exception types in the type
attribute:
ColdFusion advanced exception type |
---|
COM.Allaire.ColdFusion.CFEXECUTE.OutputError |
COM.Allaire.ColdFusion.CFEXECUTE.Timeout |
COM.Allaire.ColdFusion.FileException |
COM.Allaire.ColdFusion.HTTPAccepted |
COM.Allaire.ColdFusion.HTTPAuthFailure |
COM.Allaire.ColdFusion.HTTPBadGateway |
COM.Allaire.ColdFusion.HTTPBadRequest |
COM.Allaire.ColdFusion.HTTPCFHTTPRequestEntityTooLarge |
COM.Allaire.ColdFusion.HTTPCGIValueNotPassed |
COM.Allaire.ColdFusion.HTTPConflict |
COM.Allaire.ColdFusion.HTTPContentLengthRequired |
COM.Allaire.ColdFusion.HTTPContinue |
COM.Allaire.ColdFusion.HTTPCookieValueNotPassed |
COM.Allaire.ColdFusion.HTTPCreated |
COM.Allaire.ColdFusion.HTTPFailure |
COM.Allaire.ColdFusion.HTTPFileInvalidPath |
COM.Allaire.ColdFusion.HTTPFileNotFound |
COM.Allaire.ColdFusion.HTTPFileNotPassed |
COM.Allaire.ColdFusion.HTTPFileNotRenderable |
COM.Allaire.ColdFusion.HTTPForbidden |
COM.Allaire.ColdFusion.HTTPGatewayTimeout |
COM.Allaire.ColdFusion.HTTPGone |
COM.Allaire.ColdFusion.HTTPMethodNotAllowed |
COM.Allaire.ColdFusion.HTTPMovedPermanently |
COM.Allaire.ColdFusion.HTTPMovedTemporarily |
COM.Allaire.ColdFusion.HTTPMultipleChoices |
COM.Allaire.ColdFusion.HTTPNoContent |
COM.Allaire.ColdFusion.HTTPNonAuthoritativeInfo |
COM.Allaire.ColdFusion.HTTPNotAcceptable |
COM.Allaire.ColdFusion.HTTPNotFound |
COM.Allaire.ColdFusion.HTTPNotImplemented |
COM.Allaire.ColdFusion.HTTPNotModified |
COM.Allaire.ColdFusion.HTTPPartialContent |
COM.Allaire.ColdFusion.HTTPPaymentRequired |
COM.Allaire.ColdFusion.HTTPPreconditionFailed |
COM.Allaire.ColdFusion.HTTPProxyAuthenticationRequired |
COM.Allaire.ColdFusion.HTTPRequestURITooLarge |
COM.Allaire.ColdFusion.HTTPResetContent |
COM.Allaire.ColdFusion.HTTPSeeOther |
COM.Allaire.ColdFusion.HTTPServerError |
COM.Allaire.ColdFusion.HTTPServiceUnavailable |
COM.Allaire.ColdFusion.HTTPSwitchingProtocols |
COM.Allaire.ColdFusion.HTTPUnsupportedMediaType |
COM.Allaire.ColdFusion.HTTPUrlValueNotPassed |
COM.Allaire.ColdFusion.HTTPUseProxy |
COM.Allaire.ColdFusion.HTTPVersionNotSupported |
COM.Allaire.ColdFusion.POPAuthFailure |
COM.Allaire.ColdFusion.POPConnectionFailure |
COM.Allaire.ColdFusion.POPDeleteError |
COM.Allaire.ColdFusion.Request.Timeout |
COM.Allaire.ColdFusion.SERVLETJRunError |
COMCOM.Allaire.ColdFusion.HTTPConnectionTimeout |
<!--- cfcatch example, using TagContext to display the tag stack. ---> <h3>cftry Example</h3> <!--- Open a cftry block. ---> <cftry> <!--- Note misspelled tablename "employees" as "employeeas". ---> <cfquery name = "TestQuery" dataSource = "cfdocexamples"> SELECT * FROM EMPLOYEEAS </cfquery> <!--- Other processing goes here. ---> <!--- Specify the type of error for which we search. ---> <cfcatch type = "Database"> <!--- the message to display. ---> <h3>You've Thrown a Database <b>Error</b></h3> <cfoutput> <!--- The diagnostic message from ColdFusion MX. ---> <p>#cfcatch.message#</p> <p>Caught an exception, type = #CFCATCH.TYPE# </p> <p>The contents of the tag stack are:</p> <cfdump var="#cfcatch.tagcontext#"> </cfoutput> </cfcatch> </cftry>