comment déboguer JSF / EL

Comment déboguer EL dans la page JSF? Je voudrais regarder les valeurs variables, les appels de fonction, etc. La meilleure solution serait un plugin eclipse, mais toute autre possibilité vaut mieux que de deviner " pourquoi cette expression n'a pas réussi à rendre correctement?".

41
demandé sur mrzasa 2011-11-25 13:23:12

2 réponses

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

Appuyer sur CtrldécalageD {[15] } devrait alors afficher une fenêtre contextuelle avec des informations de débogage sur l'arborescence des composants et tous les paramètres de requête disponibles et les variables request/view/flash/session/application scoped. C'est essentiellement une représentation du contenu de toutes ces cartes.

Le raccourci clavier est d'ailleurs configurable par hotkey attribut so que vous pouvez en choisir un autre chaque fois qu'il entre en conflit avec les raccourcis clavier par défaut du navigateur, comme cela se ferait dans Firefox; CtrldécalageD {[15] } affiche par défaut la boîte de dialogue ajouter des signets. Voici comment vous pouvez le faire écouter sur CtrlMajX au lieu de cela:

<ui:debug hotkey="x" />

Vous souhaitez généralement le cacher 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 fourni sur les variables étendues n'est pas si grand que vous attendez. Il ne montre que le résultat Object#toString() de toutes les variables étendues qui sont 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 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 autant que possible les informations pertinentes soient renvoyées (si nécessaire, vous pouvez même laisser Eclipse La générer automatiquement par le code source 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 lancera là aussi quand EL appelle la méthode. Si c'est un bean géré, vous verrez également ses propriétés dans le débogueur Eclipse.

66
répondu BalusC 2013-05-21 12:00:35

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 faibles de cœur si.

Une autre possibilité serait de créer et d'évaluer L'EL par programme. Il y a des exemples de la façon de le faire autour. Vous pouvez ensuite utiliser le débogueur pour jouer avec ce qu'est l'expression et quel est le résultat jusqu'à ce que vous ayez déterminé où se trouve votre problème.

4
répondu Jonathan 2011-11-26 03:10:41