ScalaでClickを使ってみた

前々からやってみようと思っていたのですが、ScalaでClickを使ってみました。
ページクラスはこんな感じ。

package jp.sf.amateras.click.scala.page

import org.apache.click._
import org.apache.click.control._

class HelloPage extends Page {

  val form = new Form("form");
  val name = new TextField("name", true)
  val submit = new Submit("submit", "Send")

  override def onInit() = {
    form.add(name)
    form.add(submit)
    submit.setActionListener(new ActionListener(){
      override def onAction(source: Control): Boolean = {
        println(name.getValue())
        true
      }
    })
    addControl(form)
  }
}

うーん…、これはどうなんだ…。
まず、publicフィールドが使えないからFormを自分でaddControl()する必要があったり、ActionListenerの書き方もScalaっぽくなかったり。ただ、このへんを改善してもあまりScalaっぽくはならない気がするんですよね。
どうせやるならもっと徹底的に、こんな感じに書けるといいかなみたいな。

class HelloPage extends Page {
  val form = Form("form"){
    val textName = TextField("name", true)
    val submit = Submit("submit", "Send"){ source =>
      println(textName.getValue())
      true
    }
  }
}

Formのフィールドに宣言したフィールドは自動的にFormにadd()され、ページクラスのフィールドに宣言したコントロールは自動的にaddControl()されるイメージです。自動でやるのが乱暴であればアノテーションで制御するようにしてもいいかもしれません。