-Tapestryサービス(3)

AbstractServiceのconstructLink(IRequestCycle, String, String, Object, boolean)の第三引数であるString配列は、サービスコンテキストとなり、スラッシュで区切られてserviceパラメータの値となります。すなわち、new String[] {"aaa", "bbb", "ccc"}であれば、?service=ServiceName/aaa/bbb/cccというエンコードがされます。また、このサービスコンテキストの値は、getServiceContext()により、Stringの配列として再取得できます。
一方、第四パラメータのObjectの配列は、サービスパラメータと呼ばれ、過日解説したものです。こちらはDataSqueezeというTapestry内部のユーティリティによって、ObjectからURLの一部となる文字列に変換され、また文字列からObjectに戻す仕組みを提供しています。
Tapestryの最大のカスタマイズポイントはここにあります。また、ページ遷移の挙動にTapesryの一番の誤解とフレームワーク利用の間違いがあるのですが、このサービスの仕組みとあわせて、Tapesryのステートの考え方を再確認しなければなりません。結論から先に言うと、Tapestryはページオブジェクトとそのイベントハンドラ的なリンクやフォームのつくりから誤解しやすいのですが、フレームワークソリューションはすべてステートレスなつくりになっています。Tapestryの一番の利点と難点は背中合わせに、このステートレスな考え方にあり、その考え方の基盤と標準に提供されているフレームワークの内容から、要件にあわせて生産性を出すためのひとつの抜け道がサービスの理解と独自サービスの実装にあります。