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

Seam Java Discussion :

Exception durant RENDER RESPONSE


Sujet :

Seam Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2002
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 38
    Points : 33
    Points
    33
    Par défaut Exception durant RENDER RESPONSE
    Salut à tous,

    Bon voila, j'ai mon projet qui tourne sous JSF 1.2 couplé à Seam 2 et je galère vraiment à traiter les exceptions levées lors de la RENDER_RESPONSE phase du cycle de vie JSF.

    En gros, c'est pas compliqué, j'ai une page sur laquelle se produit une erreur (LazyInitialisationException), et je voudrais rediriger l'utilisateur vers une page d'erreur "maison" (error.jspx).

    J'ai cru comprendre que Seam ne savait pas opérer sur cette phase du cycle de vie JSF donc j'ai essayé d'intervenir au niveau JSF plutôt.

    J'ai trouvé un post intéressant et prometteur (http://insights2jsf.wordpress.com/20...ns-in-jsf-1-2/) qui consiste à implémenter deux classes implémentant respectivement LifecycleFactory et Lifecycle.

    En gros j'ai redéfini la méthode suivante dans ma classe InterceptingLifecycle qui étend javax.faces.lifecycle.Lifecycle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    @Override
    public void render(FacesContext context) throws FacesException {
    	try {
    		logger.info("render(...)");
    		getWrapped().render(context);
    	}
    	catch (FacesException intercepted) {
    		logger.error("===>>> Intercepted Throwable from render()", intercepted);
    		throw intercepted;
    	}
    }
    Le fait est que je passe bien dans le try (je passe les quelques modifs apportées web.xml & faces-config.xml) mais jamais dans le catch... Du coup, impossible de traiter l'erreur.

    Est-ce que je m'y prend comme il faut où est-ce que je suis complètement hors-sujet ?

    Merci d'avance de votre aide.
    sicard_51, la bonne brioche anisée !

  2. #2
    Membre actif

    Homme Profil pro
    Software Engineer
    Inscrit en
    Août 2004
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 173
    Points : 220
    Points
    220
    Par défaut
    Une simple redirection du page.xml ne suffirait-elle pas ?

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	<exception class="java.lang.IllegalStateException">
    		<end-conversation/>
    		<redirect view-id="/page.xhtml">
    			<message>Message derreur</message>
    		</redirect>
    	</exception>

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2002
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    Bonne idée, je teste ça dès demain matin.
    Merci pour l'aide.
    sicard_51, la bonne brioche anisée !

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2002
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    En fait dans le pages.xml, j'ai déjà ça, sensé traité tous les types d'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <exception>
    	<redirect view-id="/error.jspx">
    		<message severity="error">Unexpected error, please try again</message>
    	</redirect>
    </exception>
    Mais malheureusement, cela ne fonctionne pas.

    A mon avis à cause du fait que l'exception en question est levée lors de la RENDER_RESPONSE.

    Extrait de la doc seam :
    It is important to note that Seam cannot handle exceptions that occur during JSF's RENDER_RESPONSE phase, as it is not possible to perform a redirect once the response has started being written to.
    Je sèche un peu la.
    sicard_51, la bonne brioche anisée !

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2002
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 38
    Points : 33
    Points
    33
    Par défaut
    J'ai trouvé !

    Ça n'a pour le coup rien à voir avec les pistes sur lesquelles je m'étaient lancé.

    C'est en regardant les sources de la méthode handleRenderException() de la classe FaceletViewHandler que j'ai compris, j'étais en fait en mode "développement" (paramètre facelets.DEVELOPMENT dans le web.xml).

    En repassant le paramètre à false (ou plutôt en le passant car il ne l'avait jamais été), le comportement de l'appli est redevenu "normal".

    Merci en tout cas.
    sicard_51, la bonne brioche anisée !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/03/2013, 13h00
  2. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35
  3. Réponses: 3
    Dernier message: 01/11/2002, 14h30
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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