teeda for Portlet

まだ、粘る。とりあえず、teeda.dicon でのexternalContext問題は、ExternalContextWrapperを作って、コンストラクタにサーブレットとポートレットを受け付けるのを作ってみた。そんで、デモを動かそうと思ったら、どうやら、最近?HtmlRenderKitImplでresponseWriterがなくなっているらしく、削除しないとそこでエラーになる(ほかにも変更があるのだろうか・・・)。まぁ、そんなことをしてやってきたが、HelloWorld的なものを実行すると以下のような NPE・・・。valueって・・・。つまり、diconからとれていないのかな・・・。なぜだろ・・・。うむむ、結構、いろいろとはまるな・・・。

Caused by: java.lang.NullPointerException: value
at javax.faces.internal.AssertionUtil.assertNotNull(AssertionUtil.java:32)
at javax.faces.internal.ComponentAttributesMap.put(ComponentAttributesMap.java:135)
at javax.faces.internal.WebAppUtils.setCreatedFacetNames(WebAppUtils.java:92)
at javax.faces.webapp.UIComponentTag.saveFacesComponentAttribute(UIComponentTag.java:467)
at javax.faces.webapp.UIComponentTag.removeOldFacets(UIComponentTag.java:444)
at javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:190)
...

teeda for Portlet

teeda.diconとTeedaConfigureListenerを眺めてみる。MyFacesGenericPortletでは、初期化の部分をポートレットで、必要なの?みたいなコメントを書きつつやっているけど、案外、やらなくてもよいような気もするけど、やるとしたら、TeedaConfigureListenerの処理をPortlet#init でやればいいのかね(必要性はちょっとまだわからん)。問題は、teeda.dicon のexternalContextだな。これは、サーブレットとポートレットの環境で、それぞれのを返さないといかんから、DispatcherかFactory みたいなのを作って、それにrequest とかを渡して、適切なものを返してもらわないといかんな。はて、どうしよう・・・。

teeda for Portlet

MyFaces から PortletExternalContextImpl や MyFacesGenericPortlet を持ってきていじったけど、うまく動かん・・・。teeda.dicon に externalContext が書いてあるけど、これをPortletExternalContextImpl に変えると、TeedaConfigureListenerで失敗するし、これをServletのやつにしておくと、ポートレットからのdicon呼び出しで失敗するだろうし・・・。うーん、やっぱり単純に持ってきてちょこっといじるだけではだめか。もっと、中身を理解しないと、どうすべきかがわからないな・・・。