最初に結論を書いておくと
JSFのデバッグではこれで完璧だ!
というエントリではないです(^^;
自分がやってることをまとめたレベルで、むしろ皆どうやってるんだろ…的な(^^;
……
…
前回のJava EE 6開発でちょこちょこハマった点の1つに、JSFのビューが思うようにいかない…というのがありました。
しょぼいミスによるエラーとしては例えば
- IDの指定が重複している
- IDの指定が間違っている
とかですね(^^;
具体的には以下のような記述ですが、実行するとこれらはわかりやすいエラーとなるので問題ないです。
IDの指定が重複している例
<h:inputText id="txtInput" value="#{indexBean.inputText}" />
<h:inputText id="txtInput" value="#{indexBean.inputText2}" />
IDの指定が重複している場合のエラー
IDの指定が間違っている例
<h:inputText id="txtInput" value="#{indexBean.inputText}" />
<h:commandButton value="送信">
<f:ajax execute="txtImput" />
</h:commandButton>
IDの指定が間違っている場合のエラー
なぜかこっちは英語…(-_-;
エラーがわかりにくいときもありますが、まあまだ良い方かなと。
ハマるエラー
上記のように明確なエラーとならない場合にハマったりします。例えばですが
- ある一部分以降がうまく描画されない
- データと画面描画の更新してるけど反映されない
- Ajaxが思ったように動かない
などなど…。
そういうとき自分がやっていたこととしては
- APサーバのエラー出力確認
- ブラウザの開発者ツール等で生成されたHTMLやAjax通信などを確認
- <ui:debug>タグ
辺りでしたが、決め手に欠く感じ…(^^;
ブラウザの開発者ツール等で生成されたHTMLやAjax通信などを確認
主観ですが…これが全てにおいて最も効果的なんじゃないかなと(^^;
もはやJSF関係ないですが…。
主に使っていたツールは
辺りです。
レンダリングが途中からうまくできてない、とか、コンポーネントのID確認などはFirebugやChrome Developer Toolsを使うと以下のようにタグと実画面のハイライトが連動するのでタグ特定しやすいです。
Firebug
Chrome Developer Tools
Ajaxまわりも同様ですね。レスポンスのステータスや内容を確認したり。
Firebug
Chrome Developer Tools
Fiddler2
IEの開発者ツールはIEのバージョンを変えて確認する場合によく使いました。
ってホントJSF関係ないや(ノД`)
<ui:debug>タグ
で、やっとこJSF特有な情報(^^;
ビューの適当なところに<ui:debug>タグを埋め込みます。
例えば以下のような感じ。
<h:body>
<h:form id="frm">
<h:panelGrid id="pg" columns="2">
<h:inputText id="txtInput" value="#{requestScopedBean.inputRequestScopedVal}" />
<h:inputText id="txtInput" value="#{viewScopedBean.inputViewScopedVal}" />
<h:commandButton value="送信">
<f:ajax execute="txtInput" />
</h:commandButton>
</h:panelGrid>
</h:form>
</h:body>
<ui:debug/>
デフォルトではブラウザ上で
Ctrl + Shift + d
と押すことでJSFのデバッグウィンドウが起動します。
で、JSFのコンポーネントツリーを確認できたり
スコープ別にBackingBeanの確認ができたり
ちなみに、Chromeでは上記ショートカットが使われているので、定義を
<ui:debug hotkey="x"/>
などとして、ホットキーを割り当てすると楽です。これで
Ctrl + Shift + x
で起動することができます。
あと、これはあくまでもデバッグ用なので、rendered属性を使ってProduction環境では使えないようにする、とか工夫が必要となるので注意です。以下サイトなどが具体例の1つかと。
と、こんなタグがありますが、個人的にはこれが役に立った記憶があまりないです…(-_-;
どなたか「この<ui:debug>があるからこれこれが嬉しいじゃないか!」というのがあれば是非(^^;
というわけで、皆JSFのデバッグってどうやってるのかしら…と。
他に何かいい手があるのかなー。