IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Personnaliser la page d'erreur


Sujet :

JSF Java

  1. #1
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut Personnaliser la page d'erreur
    bonjour,

    Je cherche comment faire pour personnaliser les pages d'erreurs. Parfois (malheureusement) il arrive à mon application de "planter". J'ai deux types de page d'erreur:
    1. une page blanche avec comme titre "Exception Hander" et la trace dans des carrés rose
    2. une page blanche avec deux lignes bleu qui délimite le text (en génral le titre est HTTP un numero)

    Je souhaiterai que toutes erreurs soient redirigées vers une page. Le texte restera identique mais la page aura l'allure des autres pages de mon application. Après quelque recherche j'ai créé une page ErrorDisplay (code ci dessous) et un bean request (code ci-dessous).

    Ce que je n'arrive pas à trouver c'est se que je dois mettre dans mon web.xml pour qu'il utilise cette page.

    Code de la page jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    <%@page contentType="text/html"%>
    <%@page pageEncoding="UTF-8"%>
     
    <%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
    <%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
     
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
     
    <html>
        <f:subview id="errorPage">
            <head>
                .....
                <title>ERRO PAGE</title>
            </head>
            <body>
                <div id="cadreGeneral">
                    <h:form id="formErrorPage">
                        <div class="page">
                            <div class="formCadre">
                                <h:outputText value="#{ErrorDisplay.stackTrace}"/>
                            </div>
                        </div>
                    </h:form>
                </div>
            </body>
        </f:subview>
    </html>
    Code du bean:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    public class ErrorDisplay {
     
        public String getStackTrace() {
            final FacesContext context = FacesContext.getCurrentInstance();
            final Map<String, Object> request = context.getExternalContext().getRequestMap();
            final Throwable ex = (Throwable) request.get("javax.servelt.error.exception");
            final StringWriter sw = new StringWriter();
            final PrintWriter pw = new PrintWriter(sw);
            fillStackTrace(ex, pw);
            return sw.toString();
        }
     
        private static void fillStackTrace(Throwable t, PrintWriter w) {
            if (t == null) {
                return;
            }
            t.printStackTrace(w);
            if (t instanceof ServletException) {
                final Throwable cause = ((ServletException) t).getRootCause();
                if (cause != null) {
                    w.println("Root cause: ");
                    fillStackTrace(cause, w);
                }
            } else if (t instanceof SQLException) {
                final Throwable cause = ((SQLException) t).getNextException();
                if (cause != null) {
                    w.println("Next Exception: ");
                    fillStackTrace(cause, w);
                }
            } else {
                final Throwable cause = t.getCause();
                if (cause != null) {
                    w.println("Cause: ");
                    fillStackTrace(cause, w);
                }
            }
        }
    }

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu peux définir le code erreur ou le type d'exception comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <error-page>
      <exception-type>xxxx</exception-type>
      <location>/yyyy.jsp</location>
     </error-page>

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    Avec cette technique je dois indiquer le numero de toutes les exceptions. Je ne souhaite pas faire de cas particulier il n'est pas possible de lui indiquer une page pour quelque soit l'exception?

    Par exemple je viens juste d'avoir une page exception Handler (avec des rose) indiquant l'exception suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Description:  An unhandled exception occurred during the execution of the web application. Please review the following stack trace for more information regarding the error.
    Exception Details: javax.faces.application.ViewExpiredException
      viewId:/webui/acceptors/Acceptors.faces - View /webui/acceptors/Acceptors.faces could not be restored.
    Je souhaite que cette page prenne le style de mon modèle mais la je ne vois pas quoi mettre à la place de tes xxxx

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    ViewExpiredException c'est un peu speciale ça dépend de l'implémentation JSF et des librairies de composants utilisées.

    si tu as des erreurs métiers ou autre, tu peux donner le type d'exception tous les sous-types seront pris en compte..

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    Desolée mais je comprend pas....
    Tu es entrien de me dire qu'il n'y a pas une basile pour gérer la redirection de la page quelque soit l'erreur?

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par Edta Voir le message
    Desolée mais je comprend pas....
    Tu es entrien de me dire qu'il n'y a pas une basile pour gérer la redirection de la page quelque soit l'erreur?
    Si tu gere les exceptions dans ton application et tu lance une exception par exemple de type com.company.error.Exception:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <exception-type> com.company.error.Exception</exception-type>
    à chaque exception de type com.company.error.Exception intercepté par le serveur, il y'aura redirection pour vers la page définis.

  7. #7
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    Comment puis je rédiger une liste d'erreur (pour mettre dans la balise <exceptionType>) alors que je ne la connais pas?

    L'application n'est jamais a l'abris d'avoir une exception une fois dans les mains de l'utilisateur

    Edit: pour le veiwHandler. Quelle soit particulière ou pas cela n'est pas important. Je veux juste qu'elle s'affiche dans ma page model d'erreur

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par Edta Voir le message
    Comment puis je rédiger une liste d'erreur (pour mettre dans la balise <exceptionType>) alors que je ne la connais pas?

    L'application n'est jamais a l'abris d'avoir une exception une fois dans les mains de l'utilisateur

    Edit: pour le veiwHandler. Quelle soit particulière ou pas cela n'est pas important. Je veux juste qu'elle s'affiche dans ma page model d'erreur
    tu peux aussi utiliser les codes exception http 404 ou 405, après les autres exceptions viennent de l'application et normalement doivent être gérées.
    pour le viewExpiredException ça depend de ton implementation JSF et tes librairies, depuis JSF 1.2, c'est JSF qui la gére plus ou moins bien suivant les technologies utilisées.

  9. #9
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Ce post m'interesse...
    J'ai pris un peu de temps pour suivre vos echanges et j'ai quelques questions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <error-page>
      <exception-type>xxxx</exception-type>
      <location>/yyyy.jsp</location>
     </error-page>
    Si j'ai bien compris, pour toute classe et s/classe d'exception type levée cette page sera appelée, mais ma question comment recuperer la trace d'erreur pour mettre dans yyyy.jsp?
    Est ce avec ce code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    public class ErrorDisplay {
     
        public String getStackTrace() {
            final FacesContext context = FacesContext.getCurrentInstance();
            final Map<String, Object> request = context.getExternalContext().getRequestMap();
            final Throwable ex = (Throwable) request.get("javax.servelt.error.exception");
            final StringWriter sw = new StringWriter();
            final PrintWriter pw = new PrintWriter(sw);
            fillStackTrace(ex, pw);
            return sw.toString();
        }
     
        private static void fillStackTrace(Throwable t, PrintWriter w) {
            if (t == null) {
                return;
            }
            t.printStackTrace(w);
            if (t instanceof ServletException) {
                final Throwable cause = ((ServletException) t).getRootCause();
                if (cause != null) {
                    w.println("Root cause: ");
                    fillStackTrace(cause, w);
                }
            } else if (t instanceof SQLException) {
                final Throwable cause = ((SQLException) t).getNextException();
                if (cause != null) {
                    w.println("Next Exception: ");
                    fillStackTrace(cause, w);
                }
            } else {
                final Throwable cause = t.getCause();
                if (cause != null) {
                    w.println("Cause: ");
                    fillStackTrace(cause, w);
                }
            }
        }
    }
    Je suis confronté au même pb actuellement dans mon projet.
    Merci de vos reponses.

  10. #10
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    comme tu le vois, ca redirige vers une page jsp. Les pages jsp d'erreur sont particulières, elle ont cette forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <%@ page isErrorPage="true" %>
    <html> 
     
      blablabla
      <font color="red">
    <%= exception.toString() %><br>
    </font>
    ...
    </html>

  11. #11
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%= exception.toString() %><br>
    Je ne vois pas la déclaration de la variable exception,et comment est elle alimentée?
    Et cette page d'erreur est jsp, le mecanisme marche til aussi avec les pages JSF?

  12. #12
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%= exception.toString() %><br>
    Je ne vois pas la déclaration de la variable exception,et comment est elle alimentée?

    Elle existe en vertu de ceci
    <%@ page isErrorPage="true" %>

    Pour ce qui est de jsp, l'exception se récupère comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            FacesContext context = FacesContext.getCurrentInstance();
            Map requestMap = context.getExternalContext().getRequestMap();
            Throwable ex = (Throwable) requestMap.get("javax.servlet.error.exception");
    Il faut cependant prendre garde, lors de la déclaration du error-page dans le web.xml à bien référencer l'url passant par facelets (exemple /error.jsf)

  13. #13
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Ok merci pour tes reponses.
    Je reviendrai probablement vers toi quand j'implementerai cette solution.

Discussions similaires

  1. Personnaliser la page d'erreur sur OAS
    Par elhilm dans le forum PL/SQL
    Réponses: 3
    Dernier message: 19/08/2008, 11h41
  2. personnaliser les pages d'erreur 404 et autres
    Par aurelientp dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 18/02/2008, 13h15
  3. Personnalisation des pages d'erreurs
    Par maya dans le forum Apache
    Réponses: 2
    Dernier message: 17/12/2006, 22h54
  4. Personnalisation des pages d'erreur Apache
    Par bat dans le forum Apache
    Réponses: 6
    Dernier message: 07/11/2005, 16h46
  5. Personnaliser les pages d'erreurs
    Par Jeweller dans le forum XMLRAD
    Réponses: 3
    Dernier message: 03/06/2004, 12h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo