eclipse - Wie debugge ich JSF/EL




debugging jsf-2 (2)

Wie kann ich EL auf der JSF-Seite debuggen? Ich möchte Variablenwerte, Funktionsaufrufe usw. beobachten. Die beste Lösung wäre ein Eclipse-Plugin, aber jede andere Möglichkeit ist besser als zu raten "Warum konnte dieser Ausdruck nicht korrekt gerendert werden?".


Wenn Sie wirklich Probleme haben, können Sie, wenn Sie die Quelle für die EL-Implementierung erhalten können (einfach genug für die RI), Eclipse verwenden, um Haltepunkte in den EL-Implementierungsmethoden zu setzen. Sie müssen verstehen, wie der EL-Code funktioniert, aber es ist nicht so kompliziert. Nicht für sehr schwache Herzen.

Eine andere Möglichkeit wäre, die EL programmatisch zu erstellen und auszuwerten. Es gibt Beispiele dafür, wie man das macht. Sie können dann den Debugger verwenden, um herauszufinden, was der Ausdruck ist und was das Ergebnis ist, bis Sie herausgefunden haben, wo Ihr Problem liegt.


Das engste, was Sie in JSF / Facelets bekommen können, ist ein <ui:debug /> irgendwo in der Ansicht:

<ui:debug />

Wenn Sie STRG-UMSCHALT D drücken, sollte ein Popup-Fenster mit Debug-Informationen zum Komponentenbaum und allen verfügbaren Anfrageparametern und den Variablen für Anfrage / Ansicht / Flash / Sitzung / Anwendungsbereich angezeigt werden. Es ist im Grunde eine Darstellung des Inhalts all dieser Karten.

Der Hotkey ist übrigens über das hotkey Attribut konfigurierbar, so dass Sie bei einem Konflikt mit den Standard-Hotkeys des Browsers einen anderen auswählen können, wie es in Firefox der Fall wäre. Strg Shift D würde standardmäßig den Dialog Lesezeichen hinzufügen anzeigen . So könntest du es machen, stattdessen Strg + Shift X zu hören:

<ui:debug hotkey="x" />

Normalerweise möchten Sie es auch in der Nicht-Entwicklungsstufe ausblenden. Fügen Sie also eine gerenderte Bedingung hinzu:

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

In den gezeigten Debuginformationen sind die Informationen zu Bereichsvariablen nicht so gut, wie Sie es erwarten würden. Es zeigt nur das Object#toString() Ergebnis aller Bereichsvariablen, standardmäßig [email protected] . Sie können ihre Eigenschaften und die Werte ihrer Eigenschaften nicht direkt wie in der Debug-Ansicht des Debuggers von Eclipse untersuchen. Sie müssen toString() für die Klasse entsprechend implementieren, sodass möglichst viele relevante Informationen zurückgegeben werden (bei Bedarf können Sie Eclipse sogar automatisch generieren lassen, indem Sie den Quellcode rechtsklicken> Quelle> Generate toString () ):

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

Setzen Sie für Methodenaufrufe einfach einen Haltepunkt auf den Java-Quellcode. Eclipse tritt auch dort ein, wenn EL die Methode aufruft. Wenn es sich um eine verwaltete Bean handelt, sehen Sie deren Eigenschaften auch im Eclipse-Debugger.





el