ひがやすを技術ブログ

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

S2JSF Maya S2Pages S2Struts

ほんとは、明日話そうかと思っていたのですが、混乱をまねきそうなので、1日早くリークしておきます。今日1日議論する時間があった方がいいと思ったからです。また、この内容は、誰の合意も得てないことをはじめに言っておきます。(笑)
現在のS2JSFは、HTMLをコンパイルして、直接JSFコンポーネントツリーを作成しています。
これをHTMLをコンパイルして、JSFJSPのTagのツリーを作るように変更します。
この部分は、JSFとは切り離します。この部分を実現するのがS2Pagesです。
今のorg.seasar.jsf.templateを汎用的にしたものです。
重要なインターフェースは、TagHandler(S2JSFではTagSelector)です。

TagHandler


boolean isHandleble(String namespaceURI, String localName,
String qName, Attributes attributes);

Tag createTag(String namespaceURI, String localName,
String qName, Attributes attributes);
S2Pagesは、HTMLをNekoHTMLでSAXで処理します。
SAXのイベントのstartElement(String namespaceURI, String localName, String qName, Attributes attributes)でTagHandlerのリストを登録順に検索し、最初にisHandleableがtrueを返したTagHandlerのcreateTag()を呼び出し、Tagのツリーを作成します。
S2JSFのViewTemplateHandlerをみれば、実装イメージがつかめます。
後は実行時にPageContextを作成して、Tagにセットして、ツリーをWalkすればOK。この辺は、以前にやったことあります。
S2SFは、今のS2JSF-EL部分とTagHandler群で構成されます。
MayaもTagHandlerを実装するようにすることでS2JSFと併用できます。
MayaとS2JSFは仕様をマージした方がいいと思っていて、HTMLにマッピング情報を記述するときにはS2JSF、別の設定ファイルに切り出すときには、Mayaを使うという風にした方がいいのではないでしょうか。 -> まさたかさん
S2JSFのTagHandler群と同様の仕組みで、Strutsも対応できます。-> きむきむ

構想について to:まさたかさんへ

最初からあまりでかくすべきではないと思う。
読む人も混乱する。
人は大きな仕様は望まないと思う。学習コストがかかるから。
最初は、HTMLだけのマッピングXMLを使ったインジェクション、コンポーネント化の仕様があればいいと思います。
HTMLに直に書く場合には、S2JSFのように名前空間で修飾した方がいいと思います。ブラウザで直接プレビューできなくなるし。
重要だと思うのは、

  • 仕様が単純で小さく直ぐに理解できること
  • 実装が早く出ること
  • 他のフレームワークと出来るだけ重複しないこと

だと思います。
私の描いているシナリオは次のとおり

  • HTMLだけのマッピングの仕様を直ぐに固める
  • HTMLだけのマッピングを今年中に実装する。
    • これは私がやろうと思ってます。S2JSFをこのまま進めていくと、もろMayaとバッティングしそうです。Mayaに直接HTMLに属性を書くときに名前空間を使うという仕様を入れれば、inject属性をサポートすることで、今のS2JSFとほぼ同じ感じでいけそうです。くーす本はS2JSFでいきたいので、私にはあまり残された時間がありません。
  • 実装が出来ている分について、ツールでサポートする。
  • 今年いっぱいで、XMLを使ったインジェクション、コンポーネント化の仕様をかためる。
  • 来年1月中にXMLを使ったインジェクション、コンポーネント化の部分を実装する。
    • 話の流れから私が実装する。
  • 実装が出来ている分について、ツールでサポートする。
  • 残りの仕様はこの後考える。

このシナリオならStrutsも最初からサポートできます。