Documentation

You are viewing the documentation for Play 1. The documentation for Play 2 is here.

CRUD: 管理機能ジェネレータ

CRUD (Create, Read, Update, Delete) モジュールは、JPA モデルオブジェクト用の完全に利用可能な web インタフェースを生成します。

例を見てみましょう。

アプリケーションで CRUD モジュールを利用可能にする

/conf/application.conf ファイルに次の行を追加することで、CRUD モジュールを有効にします:

# The crud module
module.crud=${play.path}/modules/crud

デフォルトの CRUD ルートの取り込み

conf/routes ファイルに次の行を追加することで、モジュールのデフォルトのルートを取り込みます:

# Import CRUD routes
*      /admin              module:crud

デフォルトのルートファイルの使用は必須ではないことに 注意 してください。独自のルートを定義することも、これら 2 つを混ぜ合わせることも可能です。

User クラスの作成

User クラスの作成から始めましょう:

package models;
 
import play.*;
import play.db.jpa.*;
 
import javax.persistence.*;
import java.util.*;
 
@Entity
public class User extends Model {
 	
	public String name;
	public String email;
	public String address;
 	
}

Users コントローラの作成

続いて、CRUD コントローラを継承するだけのシンプルなコントローラを作成します。

package controllers;
 
public class Users extends CRUD {
    
}

ここで http://localhost:9000/admin を開くと、User 管理画面が見えるはずです。

コントローラクラスの名前は、モデルクラス名の最後に ‘s’ を付けたものでなければなりません。違う名前を付けたい場合は、アノテーションを使うことができます。

package controllers;
 
@CRUD.For(User.class)
public class AdminUsers extends CRUD {
   
}

User フォーム

Add ボタンをクリックすると、User フォームが表示されるはずです。

User クラスにいくつかバリデーションルールを追加することができます:

package models;
 
import play.*;
import play.db.jpa.*;
 
import javax.persistence.*;
import java.util.*;
 
import play.data.validation.*;
 
@Entity
public class User extends Model {
 	
    @Required
    @MinSize(8)
    public String name;
	
    @Required
    @Email
    public String email;
	
    @Required
    @MaxSize(1000)
    public String address;
 
    public String toString() {
        return email;
    }
	
}

User フォームを更新すれば、バリデーションが自動的に適用されていることを確認できるでしょう。

フォームラベルの変更

アプリケーションの conf/messages ファイルに以下の行を追加してください:

name=Name
email=Email address
address=Postal address

そして、User フォームを更新してください。

User の作成とリストビューのカスタマイズ

デフォルトのリストビューは、オブジェクトの toString() メソッドの結果を含むただひとつの列を使用します。

このビューをカスタマイズするには、アプリケーションに /app/views/Users/list.html テンプレートを作成する必要があります。

シェルを開いてアプリケーションディレクトリに移動したら、以下をタイプします:

play crud:ov --template Users/list

このコマンドは、CRUD のデフォルトの list.html テンプレートを、アプリケーションの Users/list.html にコピーしますが、もしこのファイルが存在すれば上書きします。

このテンプレートを以下のように編集してください:

#{extends 'CRUD/layout.html' /}
 
<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', 'name'] /}
	</div>
	
	<div id="crudListPagination">
		#{crud.pagination /}
	</div>
	
	<p id="crudListAdd">
		<a href="@{blank()}">&{'crud.add', type.modelName}</a>
	</p>
</div>

そして、リストを更新してください。

フィールドレンダリングのカスタマイズ: crud.custom タグ

それぞれの '‘User’' エンティティの、リストやフォームビューにおける表示のされ方をカスタマイズすることで、ちょっと前進することができます。

フィールドをカスタマイズするには、'‘#{crud.custom}’' タグを使用します:

#{crud.table fields:['name', 'company']}
 
   #{crud.custom 'company'}
       <a href="@{Companies.show(object.company.id)}">${object.company.name}</a>
   #{/crud.custom}
 
#{/crud.table}

カスタムハンドラを定義することで、追加の列や入力フォームを表示することもできます:

#{crud.table fields:['name', 'company', 'edit']}
 
   #{crud.custom 'company'}
       <a href="@{Companies.show(object.company.id)}">${object.company.name}</a>
   #{/crud.custom}
 
   #{crud.custom 'edit'}
       <a href="@{Users.edit(object.id)}">Edit</a>
   #{/crud.custom}
 
#{/crud.table}

文字列のリストと列挙型のリスト

CRUD モジュールはフィールドを文字として表示します。この文字フィールドにおいて、リストはカンマで区切られた文字列として表示されます。
例えば:

@Entity
public class Account extends Model {
 
        @CollectionOfElements
        public Set<ContentType> contentTypes;
 
        @CollectionOfElements
        public Set<String> usernames;
 
        public Account(Set<String> usernames {
                super();
                this.usernames = usernames;
        }
}
~

これは、次のように表示されます:

contentTypes は “myEnumId1”,“myEnumId2” と表示され、usernames は “string1”,“string2” と表示されます。それぞれの定義において、これが CRUD モジュールで行うべき最初のカスタマイズです。

制限事項

crud モジュールは、あるひとつの: mappedBy 属性を持たないエンティティにおいて、単方向の関連を表示します