ひがやすを技術ブログ

電通国際情報サービスのプログラマ

JSF以外の要素がJSFより先にレンダリングされる

昨日、JSF以外の要素がJSFより先にレンダリングされる問題があるよと書いたのですが、これは、JSFの仕様ですね。orz
outputLinkタグは、doEndTag()で、encodeBegin(),encodeChildren(),encodeEnd()をよびだすようになっているので、doStartTag()とdoEndTag()の間にあるJSF以外の要素は、outputLinkよりも先に出力されることになります。anchor(outputLink)タグで文字を出力したいときは、子タグにoutputTextタグを使えということらしい。


<span m:inject="h:outputText" m:value="あいさつ">あいさつ</span>
みたいに。なんちゅー仕様じゃ。でもまぁ、これまで作ってきたJ2EEの仕様を見てもこんなもんかも。JSFは比較的いいせんいっているとは思うけど。
この問題は、JSF1.2で解決されるのかもしれませんが、待ってるわけにも行きません。anchorのボディにいちいちoutputTextを書くのも私的にはありえないと思うので、文字やHTMLのタグは、JSFのタグとしてマッピングするようにしたいと思います。
そうなると、JSP汎用じゃなくなってしまいますね。JSFのタグの中には、文字や通常のHTMLのタグ、JSFのタグはかけるが、JSF以外のタグはかけないということになります。
この制限は、子タグを自前でコントロールしようとするタグ(getRenderChildren()がtrueをかえすもの)についてのものです。
とりあえず、S2JSFは、Mayaのプロトタイプ(EA1)をJSF用に変えてS2JSFに吸収するという形にしたいと思います。名前空間はMayaが出てきたときに移行が発生しないようにhttp://www.seasar.org/mayaをそのまま使いたいと思っています。後、inject属性も。

  • > まさたかさん

しかし、Mayaを汎用的にするには、越えなきゃいけない難問ですね。