Il tag <cferror>. consente di modificare l'aspetto e il contenuto della pagina di errore ColdFusion. Questo è utile da tre punti di vista: 1) possiamo scegliere di non rendere disponibili ai navigatori del sito le informazioni sulla nostra applicazione che inevitabilmente vengono mostrate nel messaggio di errore; 2) possiamo dare un'aspetto grafico all'errore allineato a quello generale del sito; 3) possiamo fare in modo che ci arrivi una mail ogni volta che si verifica un problema.
<cferror> gestisce i quattro tipi di errore che sono restituiti da una pagina CFML: "Request", "Validation", "Monitor" o "Exception". Non è nello scopo di questo corso approfondire il significato di questi tipi di errore. Basti sapere che l'errore di tipo "Exception" è il più diffuso, poiché include errori relativi al database, di scrittura del codice, eccetera; al tipo "Request" possiamo generalmente includere tutti gli altri errori a livello server.
E' importante sapere che ci sono errori "Exception" e "Request" perché, quando creiamo una pagina di errore personalizzata, nel primo caso possiamo utilizzare tag CFML per gestire l'errore, nel secondo no - poiché gli errori di tipo Request sono generalmente i più gravi e per evitare complicazioni lato server ColdFusion si rifiuta di elaborare qualsiasi tag CFML, escluso il tag <cfoutput>..
Il tag <cferror> distingue - tramite l'attributo "type" - il tipo di errore catturato, e a seconda di esso possiamo decidere di mostrare un file al posto del messaggio di errore. Poiché ha senso personalizzare i messaggi di errore all'interno di tutto il nostro sito, è opportuno inserire il tag <cferror> nel file Application.cfm
1. Aggiungi all'inizio del file Application.cfm i due tag <cferror>:
<!--- Personalizza i messaggi di errore di ColdFusion --->
<cferror type="exception" template="errore_exception.cfm">
<cferror type="request" template="errore_request.cfm">
<cfapplication name="SitoDiscoteca" sessionManagement="Yes">
<!--- Visualizza l'intestazione del sito --->
<cfinclude template="header.cfm">
<cfset application.DSN = "discoteca">
In questo modo diciamo a ColdFusion di mostrare la pagina (o template) "errore_exception.cfm" nel caso si verifichi un errore di tipo "exception", e di mostrare la pagina "errore_request.cfm" nel caso di un errore di tipo "request".
2. Personalizza l'errore di tipo "request" salvando un file errore_request.cfm con il seguente contenuto:
<!--- errore_request.cfm: mostra un messaggio per error di tipo Request --->
<!DOCTYPE HTML PUBLIC "-//W3C//Dtd HTML 4.01 transitional//EN">
<html>
<head>
<title>Errore!</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="intestazione">
<tr>
<td>Ops, errore inaspettato!</td>
</tr>
</table>
<p>Si è verificato un errore nella visualizzazione della pagina.</p>
</body>
</html>
Quando si verifica un errore, ColdFusion non include i due file Application.cfm e OnRequestEnd.cfm. Per questo motivo abbiamo dovuto creare una pagina HTML completa di intestazione e chisura dei tag <body> e <html>.
3. Analogamente, salva nel file errore_exception.cfm il seguente codice:
<!--- errore_exception.cfm: mostra un messaggio per error di tipo Exception --->
<!DOCTYPE HTML PUBLIC "-//W3C//Dtd HTML 4.01 transitional//EN">
<html>
<head>
<title>Errore!</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="intestazione">
<tr>
<td>Ops, errore inaspettato!</td>
</tr>
</table>
<p>Si è verificato un errore nella visualizzazione della pagina.</p>
</body>
</html>
Se nelle pagine di errore di tipo Request non potevamo utilizzare tag CFML, nella pagina errore_exception.cfm possiamo: inseriamo ad esempio un tag <cfmail> che invii un messaggio al webmaster insieme ad alcune informazioni sull'errore.
<cferror> rende disponibili, a questo scopo, delle variabili con scope "Error" che contengono informazioni utili.
4. Modifica il file errore_exception.cfm aggiungendo il tag <cfmail>:
<!--- errore_exception.cfm: mostra un messaggio per error di tipo Exception --->
<!--- Invia una mail al webmaster con i dettagli dell'errore --->
<cfmail from="giampaolo@bellavite.com" to="giampaolo@bellavite.com" subject="Errore sul sito discoteca">
Pagina che ha generato l'errore: #error.template#
Data dell'errore: #error.DateTime#
Browser del visitatore: #error.Browser#
Variabili (eventualmente) inviate via URL: #error.QueryString#
Pagina da cui (eventualmente) proveniva: #error.HTTPReferer#
</cfmail>
<!DOCTYPE HTML PUBLIC "-//W3C//Dtd HTML 4.01 transitional//EN">
<html>
<head>
<title>Errore!</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="intestazione">
<tr>
<td>Ops, errore inaspettato!</td>
</tr>
</table>
<p>Si è verificato un errore nella visualizzazione della pagina.
Il webmaster è già stato avvisato del problema.</p>
</body>
</html>
E' chiaro, così, l'utilizzo e il significato delle variabili con scope error.
Prova ad aprire la pagina "http://localhost:8500/discoteca/dettaglio.cfm" per creare un errore di tipo "Exception" e visualizzare la pagina di errore. Il tag <cfmail> in essa contenuto invierà la mail: assicurati quindi di aver inserito nel campo to di "cfmail" il tuo indirizzo di posta elettronica. La pagina non visualizzerà più il messaggio di errore come prima, ma il template errore_exception.cfm. Le informazioni di debug in fondo alla pagina (che quando il sito è online è sicuramente meglio disattivare) riportano comunque l'errore generato.
Per scaricare i file del sito clicca qui.