web-dev-qa-db-ja.com

JSF / ELのデバッグ方法

JSFページでELをデバッグする方法は?変数値、関数呼び出しなどを監視したいと思います。最良の解決策はEclipseプラグインですが、他の可能性は「なぜこの式が正しくレンダリングできなかったのか」と推測するよりも優れています。

44
mrzasa

JSF/Faceletsで最も近いものは、ビューのどこかに _<ui:debug />_ を配置することです。

_<ui:debug />
_

押す CtrlShiftD 次に、コンポーネントツリーに関するデバッグ情報と、使用可能なすべてのリクエストパラメータ、およびrequest/view/flash/session/applicationスコープ変数がポップアップウィンドウに表示されます。基本的には、これらすべてのマップのコンテンツの表現です。

ホットキーはhotkey属性で設定できるので、Firefoxの場合のようにブラウザのデフォルトのホットキーと衝突する場合はいつでも別のものを選択できます。 CtrlShiftD デフォルトでAdd bookmarksダイアログを表示します。試聴する方法は次のとおりです CtrlShiftX 代わりに:

_<ui:debug hotkey="x" />
_

通常、非開発段階で非表示にすることも必要なので、次のようなレンダリング条件を追加します。

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

表示されたデバッグ情報では、スコープ変数について提供される情報は、期待したほど大きくありません。デフォルトで_com.example.Bean@hashcode_に設定されているすべてのスコープ変数のObject#toString()の結果のみを表示します。 Eclipseのデバッガーのデバッグビューでできるように、プロパティとプロパティの値を直接探索することはできません。クラスにtoString()を適宜実装して、可能な限り関連情報が返されるようにする必要があります(必要に応じて、ソースコードを右クリックしてEclipseに自動生成させることもできます>Source> Generate toString()):

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

メソッド呼び出しについては、Javaソースコードに通常の方法でブレークポイントを設定します。ELがメソッドを呼び出したときにもEclipseが起動します。マネージドBeanの場合は、 Eclipseデバッガーでプロパティを確認するだけです。

69
BalusC

本当に問題がある場合は、EL実装のソースを取得できる場合(RIに十分簡単)、Eclipseを使用してEL実装メソッドにブレークポイントを設定できます。 ELコードの仕組みを理解する必要がありますが、複雑ではありませんthat。しかし、非常に弱い人向けではありません。

もう1つの可能性は、ELをプログラムで作成および評価することです。これを行う方法の例があります。その後、デバッガーを使用して、問題の所在を突き止めるまで、式が何であるか、結果が何であるかをいじることができます。

6
Jonathan