Play framework
CRUD †
CRUDとは、データベースのテーブルに対し、新規レコード作成、一覧、編集、削除といった基本的な操作をWebアプリに実装することができるモジュールです。
マスタの管理のような独立したテーブルに対してのメンテナンスであれば、ほとんどコードを書くことなく実装することができます。
目次 †
導入 †
Play-1.2.4で導入したときのメモです。DB接続は済んでいる前提です。
サンプル †
サンプルを示しながらの方が分かりやすいので、実コードを晒していく。
- routeファイルにCRUD機能を提供するURLパターンを記載する。'/admin' 配下であれば次のように書けば良い。http://localhost:9000/admin/ からアクセス可能。
# crud
GET /admin module:crud
- Userというモデルを用意。
@Entity
public class User extends Model {
@Required
public String email;
@Required
@MinSize(8)
public String password;
@Required
public String fullname;
public boolean isAdmin;
}
- このモデルをCRUDの対象にするためのコントロールを用意する。モデル名に's'を付けるのがルール。
public class Users extends CRUD {
}
中身は空っぽで構わない。この命名規則が気に入らない場合はアノテーションで別の名前にも対応できるようになっている。
@CRUD.For(User.class)
public class CrudUser extends CRUD {
}
名前のプリフィクスを統一すると一連のクラスが纏まって見やすいかもしれない。
- で、以上で完了。http://localhost:9000/admin/ にアクセスし、下図のようにリストが表示されれば成功。
- 'Add'を押下すると新規レコードの登録画面が出る。'Required'や'Min length is 8'などの制約は、モデルのアノテーションとして記載したものが自動的に採用される。
- 新規追加すると下図のように1レコードできていることが確認できる。
カスタマイズ †
- 新規レコード追加画面でのプロパティ名は、モデルの定義がそのまま表示されている。これについては、conf/messageファイルに定義することで日本語化することができる。
# You can specialize this file for each language.
# For example, for French create a messages.fr file
#
email=メールアドレス
fullname=姓名
password=パスワード
isAdmin=管理者フラグ
プロパティ名だけでなく、テーブルの名前も別名で表示することができる。
#
Prefs=地域マスタ
Users=ユーザマスタ
- 画面デザインは独自テンプレートを作成することで、柔軟に対応できる。標準で使用されるテンプレートはCRUDモジュールフォルダの'modules\crud\app\views\CRUD'にある。
- 一覧表示をカスタマイズするのであれば、list.htmlをプロジェクトの'views/Users'フォルダに配置すれば優先して適用される。下図はカスタマイズの例。
#{extends 'CRUD/layout.html' /}
#{set title:messages.get('crud.list.title', type.name) /}
<div id="crudList" class="${type.name}">
<h2 id="crudListTitle">&{'crud.list.title', type.name}</h2>
<div id="crudListSearch">
#{crud.search /}
</div>
<div id="crudListTable">
#{crud.table fields:['email', 'fullname', 'password'] /}
</div>
<div id="crudListPagination">
#{crud.pagination /}
</div>
<p id="crudListAdd">
<a href="@{blank()}">&{'crud.add', type.modelName}</a>
</p>
</div>
- テーブル編集用のテンプレートではなく入力フォームそのもののテンプレートは'modules\crud\app\views\tags\crud'にある。カスタムテンプレートをオーバーライドしたい場合は、同名のファイルをプロジェクトの'views/tags/crud'フォルダに格納することで優先的に使用される。
- こちらはテーブルごとに使い分けるようなことは出来ないようだ。(内部スクリプトで制御可能かも)
続き