WebObjectsのKeyValueコーディングとTapestryのOGNL

例えば、あるTextFieldの項目はSessionの中に入っているAccountオブジェクトのuserIdだとしましょう。

	String userId=session.getAccount().getUserId();

WebObjectsWebObjects 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ではその辺を巧みに取り入れているようです。