2006年 3月 30日 木曜日
public void afterPhase(PhaseEvent event) {
String rootId = event.getFacesContext.getViewRoot().getViewId();
if (rootId.endsWith("特定のJavaScriptファイルとかを指すID")) {
handleResourceRequest(event, "/META-INF/コンポーネント名/ファイル名",
"text/javascript");
}
........
}
public void handleResourceRequest(PhaseEvent event, String resource, String contentType) {
1). getClass().getResourceAsStream(resource);で実際のリソース取ってきて、
2). event.getFacesContext().getExternalContext().getResponse();で
HttpServletResponse 取って、
3). リソース読み込んで response に setContentType()して、
OutputStream に書き出す
}
ただ、別のリソース
を追加したりしたときの管理がけっこう面倒だったり、複数の人が別々のコンポーネント
を作ってる時、当然 PhaseListener はそのコンポーネントの数だけ存在する場合が多く、
faces-config.xml に登録されたリスナはすべて起動されて結局同じ JavaScript を
複数回ロードしてしまうような結果をレンダーしてしまうとかいうけっこう厄介な問題が
あります。Today's Page Hits: 39