かまたま日記3

プログラミングメイン、たまに日常

webflow-pluginを使おうとしてはまる

Grails徹底入門のサンプルアプリを写経中です。

Grails徹底入門

Grails徹底入門

  • 作者: 山田正樹,山本剛,上原潤二,永井昌子,杉山清美,杉浦孝博,笠原史郎,香月孝太,福岡竜一,伊堂寺北斗
  • 出版社/メーカー: 翔泳社
  • 発売日: 2008/08/26
  • メディア: 大型本
  • 購入: 3人 クリック: 42回
  • この商品を含むブログ (28件) を見る
写経でのGrailsバージョンは2.1.0を使っているのですが、Grails徹底入門のGrailsのバージョンが1.0.2のため
結構いろんなところでワナがあってなかなか進みません(T_T)
特に4章のWebFlowのところでいろいろはまったので、メモを残しておきます。

環境

  • 【OS】Window7 64bit
  • Java】1.7.0_05
  • Grails】2.1.0
  • IDEIntellij IDEA Ultimate Edition(先日の半額セールのときに購入しました!)

Webflowがデフォルトで組み込まれていない

まずWebflowはGrails1.2からはgrails-coreから除外されているため、プラグインをインストールする必要があります。

grails install-plugin webflow

そうすると下記のエラーが発生します

〜略
		::::::::::::::::::::::::::::::::::::::::::::::

		::          UNRESOLVED DEPENDENCIES         ::

		::::::::::::::::::::::::::::::::::::::::::::::

		:: org.springframework.webflow#org.springframework.webflow;2.0.8.RELEASE: not found

		:: org.springframework.webflow#org.springframework.binding;2.0.8.RELEASE: not found

		:: org.springframework.webflow#org.springframework.js;2.0.8.RELEASE: not found

		::::::::::::::::::::::::::::::::::::::::::::::


| Error Failed to resolve dependencies (Set log level to 'warn' in BuildConfig.groovy for more information):

- org.springframework.webflow:org.springframework.webflow:2.0.8.RELEASE
- org.springframework.webflow:org.springframework.binding:2.0.8.RELEASE
- org.springframework.webflow:org.springframework.js:2.0.8.RELEASE

〜略

Webflow系の3つのアーティファクト依存性が解決できないと怒られてます。

Repository設定の追加

調べたところ、WebflowのアーティファクトSpringSource Bundle Repositoryから取得する必要があるみたいです。
と、いうことでBuildConfig.groovyのrepositoriesブロックに以下の記述を追加します。

repositories {
    inherits true // Whether to inherit repository definitions from plugins

    grailsPlugins()
    grailsHome()
    grailsCentral()

    mavenLocal()
    mavenCentral()

    // uncomment these (or add new ones) to enable remote dependency resolution from public Maven repositories
    //mavenRepo "http://snapshots.repository.codehaus.org"
    //mavenRepo "http://repository.codehaus.org"
    //mavenRepo "http://download.java.net/maven/2/"
    //mavenRepo "http://repository.jboss.com/maven2/"
    mavenRepo "http://repository.springsource.com/maven/bundles/release"    // <- ここ
    mavenRepo "http://repository.springsource.com/maven/bundles/external"    // <- ここ
}

もう一回install-pluginコマンドを打つと、今度はちゃんと上記のアーティファクトがダウンロードされます。

WebFlowTestCaseの仕様変更

Grails1.1よりWebFlowTestCaseの仕様が変わったらしく、P165,リスト4.9のテストケースが失敗します。
参考:Grails goes on: WebFlowTestCaseが変わったらしい

失敗するテストケース
void testSearchFlowStart() {
    setFlow(new OrderController().searchFlow)
    def viewSelection = startFlow()
    assertEquals "search", viewSelection.viewName
}

Viewの状態を確認する場合は、assertCurrentStateEquals(String)メソッドを使うようです。
以下のように修正したら通りました。

修正版
void testSearchFlowStart() {
    setFlow(new OrderController().searchFlow)
    startFlow()
    assertCurrentStateEquals("search")
}