Play! - Step By Step Tutorial その5 〜CRUDモジュール〜

CRUDモジュール

Rails のように Play においても一般的な CRUD 処理を簡単に組み込むことができる。CRUD モジュールを組み込むために /conf/application.conf にてモジュールを有効にする。

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


/conf/routes にadminのパスでCRUDモジュールが有効になるよう設定。

# Import CRUD routes
*      /admin              module:crud


application.conf へ設定変更したので、Webサーバを一旦停止。eclipse で利用している場合には、モジュールをビルドパスに追加するため、再度 eclipsify、その後テストモードでWebサーバ起動しておく。

play eclipsify yabe
play test yabe

CRUD コントローラの作成

/app/controllers/Posts.java として以下を作成。

package controllers;
 
import play.*;
import play.mvc.*;
 
public class Posts extends CRUD {    
}


同様に /app/controllers/Users.java を作成。

package controllers;
 
import play.*;
import play.mvc.*;
 
public class Users extends CRUD {    
}


同様に /app/controllers/Comments.java を作成。

package controllers;
 
import play.*;
import play.mvc.*;
 
public class Comments extends CRUD {    
}


http://localhost:9000/admin/ としてアクセスすると、各エンティティに対するCRUD処理が可能になる。

バリデーションの追加

app/models/User.javaアノテーションを加えることでバリデーションを有効とする。

package models;

import java.util.*;
import javax.persistence.*;
import play.db.jpa.*;
import play.data.validation.*;

@Entity
public class User extends Model {

    @Email
    @Required
    public String email;
	
    @Required
    public String password;
    ・・・

以下のようにバリデーションが有効となっている。


app/models/Post.java についても同様。

package models;
 
import java.util.*;
import javax.persistence.*;
import play.db.jpa.*;
import play.data.validation.*;

@Entity
public class Post extends Model {
 
	@Required
    public String title;
	@Required
    public Date postedAt;
    @Lob
    @Required
    @MaxSize(10000)
    public String content;
    @Required
    @ManyToOne
    public User author;
    @OneToMany(mappedBy="post", cascade=CascadeType.ALL)
    public List<Comment> comments = new ArrayList<Comment>();
    ・・・


app/models/Comment.java についても同様に。

package models;
 
import java.util.*;
import javax.persistence.*;
import play.db.jpa.*;
import play.data.validation.*;

@Entity
public class Comment extends Model {
 
	@Required
    public String author;
	@Required
    public Date postedAt;
    @Lob
    @Required
    @MaxSize(10000)
    public String content;
    @Required
    @ManyToOne
    public Post post;
    ・・・

ラベルの変更(国際化)

CDRU モジュールではEntity名がそのままラベルとして表示されるので、これをカスタマイズする。conf/application.conf の i18n の項目で lang の定義を ja とする。反映はwebサーバの再起動が必要。

# i18n
application.langs=ja

conf/messages

title=Title
content=Content
postedAt=Posted at
author=Author
post=Related post
name=Common name
email=Email
password=Password
fullname=Full name
isAdmin=User is admin

conf/messages.ja

title=タイトル
email=メール
password=パスワード
fullname=氏名
isAdmin=管理者


日本語で項目が表示される。