JSF Spec 3.1.1 と 6.1.2

ExternalContext の encodeNamespace について、調べていて気づいたのだが、サーブレットでは何もしないので関係ないが、ポートレットではRenderResponse#getNamespace()を使って変換する。でも、この変換が曖昧・・・。3.1.1は、id は文字か_出始めろと書いているけど、6.1.2 ではprefixされると言っている。javadocでもprefixed by と言っているので、RenderResponse#getNamespace()を前に置くというようにととれる。でも、そうすると、3.1.1を壊す場合もあり得る。ということで、MyFacesでは、後ろに置くようにしている(元々前だったと思うが変更している)。Teeda もそれに従って、後ろに置いている。だが、Sunの実装は、前だ(っていうか、Sunの実装は1年前のだしな・・・古い)。3.1.1と6.1.2のどちらを優先すべきかは難しいけど、個人的意見としては、3.1.1を優先した方がいいかと思うので、Teedaではそのままにしておこう(MyFacesがこれでTCK通っているので、たぶん、そのままでも影響はないと思うし、Stan は JSF のスペックの話に加わっていると思うからそれでも大丈夫だろう・・・と思う)。

http://marc2.theaimsgroup.com/?l=myfaces-dev&m=114123084404303&w=2

Teeda for Portlet

別件作業がとりあえず、一段落したので、ClassCastException を見てみた。というわけで、HtmlOutputTextRenderer で UIOutput が処理できるようにしました。MyFaces と Sun JSF のコードをながめてみたところ、同じようなのが UIOutput が処理できる気がするので、追加しました。ClassCastException で落ちるのもまずいかと思うので。ほかへの影響が不明なため、とりあえず、メソッドを追加する形にしたけど、特になければ、統合してしまっても良いかも。