52 votes

comment déboguer JSF/EL

Comment déboguer EL dans la page JSF ? J'aimerais observer les valeurs des variables, les appels de fonctions, etc. La meilleure solution serait un plugin eclipse, mais toute autre possibilité est meilleure que de deviner "Pourquoi cette expression n'a pas été rendue correctement ?

75voto

BalusC Points 498232

Ce qui est le plus proche de ce que vous pouvez obtenir dans JSF/Facelets est de placer un <ui:debug /> quelque part dans la vue :

<ui:debug />

Presser CtrlShiftD devrait alors afficher une fenêtre contextuelle contenant des informations de débogage sur l'arborescence des composants et tous les paramètres de demande disponibles ainsi que les variables de demande/vue/flash/session/application. Il s'agit essentiellement d'une représentation du contenu de toutes ces cartes.

Le raccourci clavier est d'ailleurs configurable par hotkey afin que vous puissiez en choisir un autre lorsqu'il entre en conflit avec les touches de raccourci par défaut du navigateur, comme ce serait le cas dans Firefox ; CtrlShiftD afficherait par défaut le Ajouter des signets dialogue. Voici comment vous pourriez le faire pour écouter sur CtrlShiftX à la place :

<ui:debug hotkey="x" />

Vous aimeriez généralement aussi le cacher en dehors de la phase de développement, alors ajoutez une condition de rendu comme celle-là :

<ui:debug hotkey="x" rendered="#{facesContext.application.projectStage == 'Development'}" />

Dans les informations de débogage affichées, les informations fournies sur les variables scopées ne sont pas aussi importantes qu'on pourrait le penser. Elle ne montre que le Object#toString() résultat de toutes les variables scopées, qui a pour valeur par défaut com.example.Bean@hashcode . Vous ne pouvez pas explorer leurs propriétés et les valeurs de leurs propriétés directement comme vous pourriez le faire dans la vue de débogage du débogueur d'Eclipse. Vous devez implémenter toString() sur la classe en conséquence afin de renvoyer autant d'informations pertinentes que possible (si nécessaire, vous pouvez même laisser Eclipse l'autogénérer en faisant un clic droit sur le code source > . Source > Générer toString() ):

@Override
public String toString() {
    return String.format("Bean[prop1=%s,prop2=%s,prop3=%s]", prop1, prop2, prop3);
}

Pour ce qui est des appels de méthode, il suffit de placer un point d'arrêt sur le code source Java de la manière habituelle. Eclipse interviendra également lorsque EL appellera la méthode. S'il s'agit d'un haricot géré, vous verrez également ses propriétés dans le débogueur d'Eclipse.

0 votes

Enfin, j'utilise le débogueur normal d'Eclipse. ui:debug .

0 votes

+1 pour obtenir <ui:debug> de travailler (pour une définition plutôt triste du travail)

2 votes

Bonjour BalusC, je pensais poser une question similaire mais il me semble préférable de la poster ici... J'ai suivi votre Debug JSF lifecycle article sur votre blog. Outre les mécanismes de débogage que vous suggérez ici et dans cet article, est-il possible de se plonger dans la source de l'implémentation de JSF ? J'ai un problème sur ma vue avec les balises. Le rendu n'est pas celui attendu et je ne peux pas expliquer pourquoi il en est ainsi. Je pensais plonger dans les sources de JSF. Cela aurait-il un sens et si oui, pourriez-vous m'indiquer une ressource pour commencer ?

8voto

Jonathan Points 21

Si vous avez vraiment des problèmes, si vous pouvez obtenir la source de l'implémentation EL (assez facile pour le RI), vous pouvez utiliser Eclipse pour définir des points d'arrêt dans les méthodes d'implémentation EL. Vous devez comprendre le fonctionnement du code EL, mais il n'est pas nécessaire d'être un expert en la matière. que compliqué. Mais ce n'est pas pour les âmes sensibles.

Une autre possibilité serait de créer et d'évaluer la LE de manière programmatique. Il existe des exemples de cette méthode. Vous pouvez ensuite utiliser le débogueur pour modifier l'expression et le résultat jusqu'à ce que vous trouviez l'origine du problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X