MyFacesブリッジ

コミット。たぶん、これで、変な JSF の実装をしてない限り、すべてのポータルで動くことを期待。結局、かなり、いろいろなことにチャレンジしたけど(3回くらい作り直した気が・・・)、最終的には、JSF のライフサイクルを差し替えて、そこで、ResponseWriterをFacesContextに入れるようにした。本当は、ResponseWriterのcloneWithWriterでResponseWriterを作成したかったんだけど、ライフサイクルのrenderのところでは、まだ、setされていないからTomahawkのHtmlResponseWriterImplをnewすることにした。他に ResponseWriterを差し替える、何か良い方法はないだろうか(詳しい方、お願いします~)・・・。実装的には、UIComponentTagのdoStartTagでResponseWriterがsetされていなければ、入れるようになっていたけど、それ以降で出力される前で差し替える良い場所はあるのだろうか・・・。

まぁ、細かい問題はあると思うけど、Liferayでも動いたから、ほかのでも動くだろう・・・。はぁ、時間がかかったな・・・。でも、いろいろと学んだ気がする。

MyFacesブリッジ その2

いや、まだ、方法があるな。今まで、ポートレット的な立場から、あれこれしようとしていたけど、JSF 的な立場で考えると、新しいライフサイクルを作って、レンダーのところでResponseWriterを差し替えて、そこに一時的にはき出したあとで、AddResourceから先に出力すべきものを出してしまって、そのあとに差し替えたResponseWriterからはき出せばいけるかもしれない。この方法がうまくいくなら、各ポータル用に用意する必要もないと思われる。あとで、試してみるかな・・・。