-Tapestry-S2連携再考(7)
ソースを眺めていて、ちょっと手が詰まりました。Tapestryでのユーザーのロジックはページオブジェクトに行うのが一般的なので、ここでS2Container上のコンポーネントをさくっととってこれるようにしたいのですが、今のところ、以下の取得方法があるかなと思ってます。
- GlobalオブジェクトにホストされているS2Containerからコンポーネント直引き(実装完了)
- OGNL式を使って、直引きを簡便にやる(実装完了)
- ページオブジェクトのプロパティに自動でコンポーネントをセットする(バグ発生でまだ実装中)
- ページオブジェクトのコンストラクタ引数に自動でコンポーネントをセットする
- ページスペックXMLの<bean>タグにS2Containerの該当コンポーネントを自動でセットする
最後の思いつきはこりゃいいかなと思って、IBeanProviderとか調べていたら、AbstractComponentの中でデフォルト実装であるBeanProviderのコンストラクタをハードコーディングされていてがっかり。ということでもうちょっと考えてみないと。
Global経由であれば、直接&OGNL利用ともに簡単なんですけどね。Tapestryも重要機能をインターフェイスで受けていたりして柔軟なつくりにはなっていても徹底はされていなかったってことで、場合によってはパッチ方策まとめてTapestry-DEV-MLに要望しようかと思ってます。Type2的なページオブジェクトのプロパティを自動でセットするというのは効率こそ悪いができそうではあるので、引き続きバグ原因さぐります。