2008-03-29

これは良い組合せ。そうか,groovycでクラスファイル作っちゃうから元がGroovyでも全然問題ないんだな。いいねー,Clickオモシロス。
#「Pageクラス程度だったら,Javaで書いてもそんな負担じゃないでしょ」というヤボは言っちゃダメ。:-D


というわけで,ちょっと試しに画面遷移などやってみた。

=== HomePage.groovy ===
class HomePage extends Page {
  public form = new Form();
  private textField = new TextField(name:"name", label:"名前")

  HomePage() {
    form << textField
    textField.required = true

    form << new Submit("submit", "OK", this, "onOkClick")
  }

  boolean onOkClick() {
    if (!form.isValid()) return false
    def nextPage = context.createPage(NextPage)
    nextPage.text = textField.value

    //forward = nextPage は NG
    setForward(nextPage)
    return true;
  }

  static {
    // form << obj のおまじない
    Form.metaClass.leftShift = { delegate.add(it) }
  }
}

=== NextPage.groovy ===
class NextPage extends Page {
  public backLink = new ActionLink()
  public text

  NextPage() {
    backLink.setListener(this, "onBackLinkClick")
  }

  boolean onBackLinkClick() {
    setRedirect HomePage
    return false
  }
}

ところどころ「元はJavaだから」的なことを意識しないと行けないのが玉に瑕だけど,まあまあ良い感じ。
Groovyは,まだ内部クラスや無名クラスが使えないので,AutoCompleteTextFieldとかタイプセーフなアクションリスナの解決方法を模索しないといけない。そんでも,自分以外の人がメンテするなんてこと考えなければ,GroovyとClickの組合せはGood!
実際の所,IntelliJのGroovyサポートは他と比べて頭ひとつ抜き出てるしね。
裏を返せば,IntelliJ使わないんだったら,あんまりGroovyにこだわる事もないとも言える。:-P


ps.
Groovy使うんだったらGrailsが王道なんだけど,自分の目的*1に沿わないんだよね。いや,ホント,そんだけClickのオートレイアウトは便利なんだって。
あとGroovyの記述性もね。