The cftry
tag lets you go beyond reporting error data to the user:
For example, you can use cftry
to catch errors in code that enters data from a user registration form to a database. The cfcatch
code could do the following:
Code that accesses external resources such as databases, files, or LDAP servers where resource availability is not guaranteed is a good candidate for using try/catch blocks.
In order for your code to directly handle an exception, the tags in question must appear within a cftry
block. It is a good idea to enclose an entire application page in a cftry
block. You then follow the cftry
block with cfcatch
blocks, which respond to potential errors. When an exception occurs within the cftry
block, processing is thrown to the cfcatch
block for that type of exception.
Here is an outline for using cftry
and cfcatch
to handle errors:
<cftry
> Put your application code here ... <cfcatch
type
="exception type
1"> Add exception processing code here ... </cfcatch
> <cfcatch
type
="exception type
2"> Add exception processing code here ... </cfcatch
> ... <cfcatch
type
="Any"> Add exception processing code appropriate for all other exceptions
here ... </cfcatch
> </cftry
>
Follow these rules and recommendations when you use cftry
and cfcatch
tags:
cfcatch
tags must follow all other code in a cftry
tag body.
cftry
blocks. For example, the following structure is valid:
<cftry> code that may cause an exception <cfcatch ...> <cftry> First level of exception handling code <cfcatch ...> Second level of exception handling code </cfcatch </cftry> </cfcatch> </cftry>
If an exception occurs in the first level of exception-handling code, the inner cfcatch
block can catch and handle it. (An exception in a cfcatch
block cannot be handled by cfcatch
blocks at the same level as that block.)
cftry
block causes an exception that gets handled by a cfcatch
block, and the cfcatch
block causes an exception that has no handler, ColdFusion will display the default error message for the exception in the cfcatch
block, and you will not be notified of the original exception.
cftry/cfcatch
combination or reaches the end of the stack.
cftry
with cfcatch
to handle exceptions based on their point of origin within an application page, or based on diagnostic information.
cftry
tag, including all its cfcatch
tags, must be on a single ColdFusion page. You cannot put the <cftry>
start tag on one page and have the </cftry>
end tag on another page.
cfcatch
block is not able to successfully handle an error, consider using the cfrethrow
tag, as described in Using the cfrethrow tag.
cfcatch
tag with no body; for example:
<cfcatch Type = Database />
cftry
and cfcatch
tags to immediately isolate the tag's exceptions.
Within the body of a cfcatch
tag, the active exception's properties are available in a cfcatch
object. The following sections describe the object contents.
The following table describes the variables that are available in most cfcatch
blocks:
Property variable | Description |
---|---|
cfcatch.Detail |
A detailed message from the CFML compiler. This message, which can contain HTML formatting, can help to determine which tag threw the exception. The |
cfcatch.ErrorCode |
The Otherwise, the value of |
cfcatch.ExtendedInfo |
Custom error message information. This is returned only to Otherwise, the value of |
cfcatch.Message |
The exception's default diagnostic message, if one was provided. If no diagnostic message is available, this is an empty string. The |
cfcatch.RootCause |
The Java servlet exception reported by the JVM as the cause of the "root cause" of the exception. |
cfcatch.TagContext |
An array of structures structure containing information for each tag in the tag stack The tag stack consists of each tag that is currently open. |
cfcatch.Type |
The exception's type, returned as a string. |
Note: If you use cfdump
to display the cfcatch variable, the display does not include variables that do not have values.
The cfcatch.TagContext
variable contains an array of tag information structures. Each structure represents one level of the active tag context at the time when ColdFusion detected the exception. That is, there is one structure for each tag that is open at the time of the exception. For example, if the exception occurs in a tag on a custom tag page, the tag context displays information about the called custom tag and the tag in which the error occurs.
The structure at position 1 in the array represents the currently executing tag at the time the exception was detected. The structure at position ArrayLen
(cfcatch.tagContext)
represents the initial tag in the stack of tags that were executing when the compiler detected the exception.
The following table lists the tagContext structure attributes:
Entry | Description |
---|---|
Column |
Obsolete (retained for backwards compatibility). Always 0. |
ID |
The tag in which the exception occurred. Exceptions in CFScript are indicated by two question marks (??). All custom tags, including those called directly, are identified as cfmodule. |
Line |
The line on the page in which the tag is located. |
Raw_Trace |
The raw Java stack trace for the error. |
Template |
The pathname of the application page that contains the tag. |
Type |
The type of page; it is always a ColdFusion page. |
The following additional variables are available whenever the exception type is database:
Property variable | Description |
---|---|
cfcatch.NativeErrorCode |
The native error code associated with this exception. Database drivers typically provide error codes to assist in the diagnosis of failing database operations. The values assumed by If no error code is provided, the value of |
cfcatch.SQLState |
The SQLState code associated with this exception. Database drivers typically provide error codes to assist in the diagnosis of failing database operations. SQLState codes are more consistent across database systems than native error codes. If the driver does not provide an SQLState value, the value of |
cfcatch.Sql |
The SQL statement sent to the data source. |
cfcatch.queryError |
The error message as reported by the database driver. |
cfcatch.where |
If the query uses the |
The following variable is only available for Expression exceptions:
Property variable | Description |
---|---|
cfcatch.ErrNumber |
An internal expression error number, valid only when |
The following additional information is available for exceptions related to errors that occur in cflock
tags:
Property variable | Description |
---|---|
cfcatch.lockName |
The name of the affected lock. This is set to "anonymous" if the lock name is unknown. |
cfcatch.lockOperation |
The operation that failed. This is set to "unknown" if the failed operation is unknown. |
The following additional variable is available if the error is caused by a missing file specified by a cfinclude
tag:
Property variable | Description |
---|---|
cfcatch.missingFileName |
The name of the missing file. |