WebObjectsのKeyValueコーディングとTapestryのOGNL
例えば、あるTextFieldの項目はSessionの中に入っているAccountオブジェクトのuserIdだとしましょう。
String userId=session.getAccount().getUserId();
WebObjectsのWebObjects BuilderというGUIでHTMLを作るツールでは、ビビビッっとマウスでドラッグして、所定のTextFieldに繋げるような事をします。バインドすると言います。(口で説明するのが難しい(笑))
もちろん、自動で出来上がるファイルは手で書き直す事も出来ます。
中身を見てみると、こんな風に書かれています。
TextField1: WOTextField { value = session.account.userId; }
これと同様の事をTapestryでどうするかというと、
<component id="userId" type="TextField"> <binding name="value" expression="visit.account.userId"/> </component>
となります。
(TapestryではHttpSessionは意識しません。その代わりにVisitオブジェクトを使用します。)
つまり、WebObjectsでもTapestryでも同じように簡単にバインディングができると言う事です。
この、ドットでつなげた書き方は、WebObjectsではKeyValueコーディングといいます。
WebObjects Foundationにその仕組みを実現する仕組みが用意されています。
com.webobjects.foundation.NSKeyValueCodingインターフェース*1をインプリメントしたクラス群がそうです。
Tapestryでは同様の機能をOGNL*2という別ライブラリで実現しているようです。
そういえばJakarta CommonsのBeanUtils*3も似たようなものですね。
WebObjectsではKeyValueコーディングがあるおかげで、Webサイトがすぐに作れるといっても過言ではないと思います。
Tapestryではその辺を巧みに取り入れているようです。