web-dev-qa-db-fra.com

comment déboguer JSF / EL

Comment déboguer EL dans la page JSF? Je voudrais regarder les valeurs 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 pu s'afficher correctement?".

44
mrzasa

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 />

Pressage CtrlShiftD devrait alors afficher une fenêtre contextuelle avec des informations de débogage sur l'arborescence des composants et tous les paramètres de demande disponibles et les variables de portée 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 l'attribut hotkey afin que vous puissiez en choisir un autre chaque fois qu'il se heurte aux raccourcis clavier par défaut du navigateur, comme il le ferait dans Firefox; CtrlShiftD afficherait par défaut la boîte de dialogue Ajouter des signets . Voici comment vous pourriez l'écouter CtrlShiftX au lieu:

<ui:debug hotkey="x" />

Vous souhaitez généralement le masquer en phase de non-développement, alors ajoutez une condition de rendu comme celle-ci:

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

Dans les informations de débogage affichées, les informations fournies sur les variables de portée ne sont pas aussi grandes que vous vous attendez. Il montre uniquement le résultat Object#toString() de toutes les variables de portée qui par défaut est com.example.Bean@hashcode. Vous ne pouvez pas explorer leurs propriétés et les valeurs de leurs propriétés directement comme vous pouvez 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 que le plus d'informations possibles soient renvoyées (si nécessaire, vous pouvez même laisser Eclipse les générer automatiquement par le code source de clic droit> Source> Générer toString () ):

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

En ce qui concerne les appels de méthode, il suffit de mettre un point d'arrêt sur le code source Java de la manière habituelle. Eclipse y entrera également lorsque EL appellera la méthode. S'il s'agit d'un bean géré, vous aurez également il suffit de voir ses propriétés dans le débogueur Eclipse.

69
BalusC

Si vous rencontrez 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 comment fonctionne le code EL, mais ce n'est pas que compliqué. Pas pour les cœurs très faibles cependant.

Une autre possibilité serait de créer et d'évaluer le EL par programmation. Il existe des exemples de procédures à suivre. Vous pouvez ensuite utiliser le débogueur pour jouer avec l'expression et le résultat jusqu'à ce que vous ayez déterminé où se situe votre problème.

6
Jonathan