GriffonでControllerにメソッドを作る際の注意
最近はGriffonでアプリを作る機会が多いですが、ハマったことを載せておきます。
とある、非常に簡単な画面があるとします。
- ボタン1つ、テキストフィールド2つ。
- ボタンを押すと、テキストフィールドに値をセットする。
- セットする値は、それぞれfunc1メソッド、func2メソッドの実行結果。
実行環境
$ uname -vs
Linux #32-Ubuntu SMP Tue Dec 11 18:51:59 UTC 2012
$ griffon -version
------------------------------------------------------------
Griffon 1.0.0
------------------------------------------------------------
Build: 04-Jun-2012 08:53 PM
Groovy: 1.8.6
Ant: 1.8.2
Slf4j: 1.6.4
Spring: 3.1.1.RELEASE
JVM: 1.7.0_09 (Oracle Corporation 23.2-b09)
OS: Linux 3.5.0-21-generic amd64
Controller
※View、Modelのソースコードは省略します。今回ハマった点はControllerの組み方です。
package testpj
import groovy.util.logging.Slf4j
class TestpjController {
// these will be injected by Griffon
def model
def view
def clicked = { evt = null ->
log.info "clicked - start."
try {
doOutside {
doLater {
model.text1 = func1()
model.text2 = func2()
}
}
} catch (e) {
log.error "clicked - exception.", e
} finally {
log.info "clicked - end."
}
}
def func1() {
return "てすとですよ"
}
String func2() {
return "てすとですよ"
}
}
ごちゃごちゃ書いていますが、model.text1、model.text2にセットしているあたりが注意です。
ボタン押下前
ボタン押下前
func1の結果が表示されません。
Griffonでは、以下の条件のメソッドについては値が返却されません。
- Controller内で定義している。
- 返却するオブジェクトのクラスを明示していない
Griffonでは、こういうケースはサービスを作成するのが正しそうです。サービス作成用のコマンドは以下になります。
$ griffon create-service hogeService
ディスカッション
コメント一覧
まだ、コメントがありません