連載
» 2011年10月05日 00時00分 公開

EclipseベースIDEでSpring MVC開発ができRoo!Rooでアプリ開発をRapidしようぜ!(2)(3/3 ページ)

[中村修太,クラスメソッド株式会社]
前のページへ 1|2|3       

Rooはファイルの手動編集とコマンド実行が自動同期

 では、追加したフィールドの名前を変更したり、削除したい場合はどうすればいいでしょうか?方法は非常に簡単で、.javaファイルから普通に削除すればOKです。

 試しに、baseプロパティをPizza.javaから削除してください。削除して保存すると、Roo Shell上で関連ファイルが更新されます。このように、ファイルの手動編集とコマンド実行の双方向で関連ファイルが作成/更新されていきます。

 ちなみに、ファイル自体を削除すれば、関連する.ajファイルも削除されます。

注意! .ajファイルは編集してはいけない

.ajファイルはRooが管理するファイルなので、編集を行ってはいけません。

JPA操作メソッドを追加/修正したり、「toString」を自分で定義したい場合は、javaファイルに対して追加/修正してください。

例えば、Pizza.javaにtoStringメソッドを定義すれば、Rooがその変更を自動検出し、Pizza_Roo_ToString.ajを削除してくれます。これは、この後生成するコントローラでも同様です。


エンティティの作成を完了

 残りのPizzaOrderエンティティも作成してしまいましょう。下記コマンドを順番にRoo Shellで実行していってください。

bash
roo> entity --class ~.domain.PizzaOrder --testAutomatically 
~.domain.PizzaOrder roo> field string --fieldName name --notNull --sizeMin 2
~.domain.PizzaOrder roo> field string --fieldName address --sizeMax 30
~.domain.PizzaOrder roo> field number --fieldName total --type java.lang.Float 
~.domain.PizzaOrder roo> field date --fieldName deliveryDate --type java.util.Date
~.domain.PizzaOrder roo> field set --fieldName pizzas --type ~.domain.Pizza

 これでエンティティの作成はすべて完了です。

「perform tests」コマンドでエンティティをテスト

 エンティティ作成時には、testAutomaticallyを付加していました。これによりエンティティが持つ「persist」「remove」など、メソッドのテストが生成されます。テストを実行してみましょう。

bash
roo> perform tests

 初回はライブラリのダウンロードも行われるので少し時間がかかるかもしれません。記事の通りにrooコマンドを実行してきたなら、問題なくすべてのテストが通るはずです。

 テスト結果を確認したい場合、「target/surefire-reports」以下にレポートが出力されています。エンティティのテストはすべて成功していますので、安心してエンティティを使用できるようになりました。

Spring MVCのコントローラとWebページを作成

 エンティティもすべて動くようになったので、最後にWeb層を作成しましょう。ドキュメントではWeb層の生成のために「controller all」コマンドを実行していますが、現在このコマンドは非推奨になっています。代わりに、「web mvc」コマンドを使用してWeb層を生成しましょう。

bash
roo> web mvc setup 
roo> web mvc all --package ~.web

「web mvc setup」コマンド

 「web mvc setup」コマンドを実行することにより、Spring MVCを使用するための準備ができ、コントローラの生成ができるようになります。

「web mvc all」コマンド

 「web mvc all」コマンドは、すべてのエンティティに対してSpring MVCコントローラを生成します。

 「package」オプションは「web mvc all」コマンド唯一のオプションで、生成されるコントローラのパッケージを「~.web」(トップレベルパッケージ.web)に指定しています。

注意! 「load-scripts.tagx」でエラーが発生した場合

原稿執筆時の2011年8月18日現在、生成されたload-scripts.tagxファイルでエラーが発生しています(参考:[#STS-1915] Invalid error marker on load-scripts.tagx file in resultant clinic.roo project - SpringSource Issue Tracker

次バージョンのSpring Roo 1.2では修正されている予定ですが、現状は手動で修正するしかありません。エラーの出ている<link>タグの位置を、下記のコメントの後ろの位置から、移動します。

jspxファイル
  <link rel="stylesheet" type="text/css" href="${tundra_url}">
    <!-- required for FF3 and Opera -->
  </link>
  <link rel="stylesheet" type="text/css" media="screen" href="${roo_css_url}">
    <!-- required for FF3 and Opera -->
  </link>

以下のようにコメントの前の位置に移動してください

jspxファイル
  <link rel="stylesheet" type="text/css" href="${tundra_url}">
  </link>
  <!-- required for FF3 and Opera -->
  <link rel="stylesheet" type="text/css" media="screen" href="${roo_css_url}">
  </link>
  <!-- required for FF3 and Opera -->

これでエラーは消えます。


生成された.javaファイルを確認

 それでは生成されたファイルを見てみましょう。サンプルとして「PizzaController.java」ファイルを開いてみてください。

PizzaController.java
package jp.cm.pizzashop.web;
 
import jp.cm.pizzashop.domain.Pizza;
import org.springframework.roo.addon.web.mvc.controller.RooWebScaffold;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
 
@RooWebScaffold(path = "pizzas", formBackingObject = Pizza.class)
@RequestMapping("/pizzas")
@Controller
public class PizzaController {
}

使われているアノテーション

 エンティティと同じく、Javaのコントローラに具体的な定義はありません。@RooWebScaffoldアノテーションでは、コントローラの基本的な設定を行っています。このアノテーションを設定することで、生成されるメソッドの制限を行うこともできます。

 また、@RequestMappingアノテーションでは、Pizzaに関連する操作のURLマッピングを行っています。

 これらアノテーションの詳細はリファレンスを確認してみてください。

生成された.ajファイルを確認

 次に、PizzaController_Roo_Controller.ajファイルを見てみましょう。「create」「show」「list」「update」と、CRUD操作のためのメソッドが一通り定義されており、メソッド内では先ほどテストした各エンティティのメソッドが呼ばれています。これらのメソッドがコントローラに織り込まれます。

Tilesを使ったView層の中身を確認

 コントローラ処理結果を表示するためのWebページを構成するのは、「WEB-INF」ディレクトリ以下に置いてあるファイルです。

画面 ディレクトリ構成

 では、それぞれの用途を説明します。

image

 画像ファイルを格納しています。

styles

 スタイルシートを格納しています。デザインを変更したい場合、ここにあるデフォルトのCSSを変更するか、新しいCSSを追加できます。

WEB-INF/i18n

 国際化のためのメッセージプロパティを定義しています。「web mvc install language」コマンドを実行することで、新たな言語用のプロパティファイルが生成されます。

WEB-INF/layout

 基本レイアウトは「Apache Tiles」を使用して定義されており、ここにある「layouts.xml」で定義されています。

WEB-INF/spring/webmvc-config.xml

 Spring MVCの設定を記述しています。ViewResolverの定義・設定もここで行っており、レスポンス形式をカスタマイズしたい場合などは、ここでカスタムしたViewResolverを定義/設定します。

WEB-INF/tags

 XML形式のカスタムタグが格納されています。

/WEB-INF/views

 XML形式のJSPが機能ごとに格納されています。機能ごとに「views.xml」があり、そこのTiles定義で各.jspxファイルを設定しています。

 自動生成されたファイルのUIを変更したい場合、これらのファイルを修正して独自のUIを定義します。

VMware vFabric tc Serverで動作確認

 作成したWebアプリを起動して動かしてみましょう。パッケージエクスプローラでpizzaアプリを[右クリック]→[Run As]→[Run on Server]と選択してください。

 ダイアログが起動するので、登録されているServerを選択して[Finish]ボタンを押下してください。

画面 [Run on Server]

 STSでは、VMware vFabric tc Serverが初めからサーバとして登録されており、このServerを使用してアプリが起動します(vFabricはアプリケーションサーバとしてtc Serverを使用しています)。

 pizzaアプリがデプロイされ、STS内のウィンドウでpizzaアプリのトップページが表示されます。左のメニューからToppingやPizzaの操作が可能です。

画面 STSでpizzaアプリを起動

さまざまなパターンの生成を補助してくれRoo

 今回は各コマンドや生成されるファイルを説明しながらアプリを作成しました。複数のエンティティが関連したモデルでも、コマンド入力を数回行うだけで適切な関連が定義され、CRUD処理ができるようになります。また、コマンドの種類やオプションも多岐に渡り、さまざまなパターンの生成を補助してくれると思います。

 基本的にRooでアプリを開発する際には、まずRooでコマンドが提供されていないかを調べてみてください。ただ、あくまでもRooは開発の補助です。ビジネスロジックは自分でJavaに記述するということを忘れないでください。

 次回は、Rooのより便利な機能について解説する予定です。

著者紹介

クラスメソッド株式会社
中村 修太


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。