-Tapestry-S2連携再考(4)

今日はユーザーROIレポートの報告があるので手作業がなかなかできないが、いくらかやって昨日のコードで原因つかめなかったら、今のType2的アプローチからType3的アプローチでまったくやり方変えてみようと思います。S2Containerから取ってきたコンポーネントの型があわないというのは、埋め込みの連携機能というより、Counterサンプルコンポーネントか設定XMLにミスがあるように直感するのですが、たかが5行とか10行しかないサンプルを何度も見てますので、変なはまり方をしてるのでしょう。そういう時は潔く違うことをしているとデバッグの神託が降るものです。私の神様はたいてい風呂にいますが、早いうちに宣託されることを祈ります。
。。。というところでうえやんさんがナイス突っ込みいれてくれてました。プロパティをオートで設定するとユーザーが意識しない初期化がされたり、初期化されていないことを気がつかなかったりするかもしれません。うえやんさんはさらにすすめて、ページオブジェクトそのものをS2Containerで提供することも考えられているようです。これは難しいんじゃないかと思いつつ、いっしょに検討していきましょう。
当初Type3的にまずやらなかった理由は、TapestryのページはWebWork2のActionと違って、インターフェイスではないので継承にてカスタマイズしないといけないため、コンストラクタでsuperよばないといけないなーやだなーとさくっと思ったのですが、しかーし、BasePageってデフォルトコンストラクタで生成できるから、super呼ばなくていいじゃないですか!枯れ木が幽霊でした。ビバType3なのかなぁ、まあ、どっちもできるようにはしてみましょう。おそらく私がはまってるのはTapestryの問題ではなく、単なる自分のバグでしょうから。
WebWork2のActionがTapestryのIPageといったのは、ビジネスロジックなりコールバックの受け口なりという俯瞰で見たときに同じ位置にくるかなということです。S2Containerからコンポーネントが自動設定されてほしいとすればIPageだなぁと考えています。ページレンダリングや画面遷移の中心にTapestryはIEngine-IService-IPageをおいていて、つないでいるのがIRequestCycleと捉えたときに、このへんいじればIPageにコンポーネント設定するタイミングを取れるだろうと。一番初めはさらに脇役のIPageRecorderいじってたんですよ。カスケードしたPageRecorderで、rollback()メソッドだけをカスタマイズしていました。これはTapestry側の事情で適用ケースが限定されるんでダメだったのです。