Click勉強記 その1

たけぞうさんがコミッタとして参加されているClickフレームワークを勉強してみています。自分用のメモがてらClickをこれから始める人にも何かしらの発見となるように一応書き残していきます。

コントロールドリブンというか、そういうものになっていて、Tapestryライク(ひいてはWebObjectsライク?)だよーという文句なのだが、Clickはそのシンプルさゆえ、実はそれすらあまり意識しなくてもいいかもしれない。

公式ドキュメントにいい感じのシーケンス図、アクティビティ図が併記されていて、それ読むだけでも「ははーん」と思える内容。

とりあえずこんな感じ

  • net.sf.click.Pageクラスをextendsした HogePageなどを作る
  • HogePageのコンストラクタやonInit()などで必要なモデル(attribute)やコントロールを生成する
  • ビュー層側ではモデルやコントロールをプレゼンテーションする。ただし、コントロールのHTMLレンダリングはコントロールのクラス自身が受け持っている。
    • コントロールは net.sf.click.Controlインタフェースのインプリメンタ
    • toString()をオーバーライドしてHTMLを返却する
  • ビュー層は基本的にはVelocityテンプレートで実装する
    • そのおかげで $attributeName だけでモデルを参照できる
    • そのおかげで $controlName だけでコントロールレンダリングを促すことができる

シンプルなアプリケーションを作る意味では、Pageのサブクラスをガンガン書くことになる。DaoやServiceと連携しつつ addModel()しまくってビュー側で参照する。ごくごくシンブルで、特にいままでと違うから困る、ところはない。

public class HogePage extends Page {
 .
 .
 public void onInit() {
   addModel("result", dao.getResult());
 }
 .
}
結果は以下の通りです. <br />
<ul>
#foreach ($each in $result)
  <li>$each.name さんは $each.age 歳でした</li>
#end
</ul>