play framework メモ(1.2系)


CRUDモジュールを使う(有効にする)

/conf/dependencies.ymlファイルに追加

require:
    - play -> crud
 

モジュールの有効化

play dependencies
 
※別の端末にコピーした時もこの作業が必要です。

/conf/routesファイルに追加

# CRUD routes
*       /admin/crud                     module:crud
 
※パスは自由に変更できます。

CRUDコントローラ追加

例 Userモデルのコントローラ

package controllers.cruds;
 
import models.User;
import controllers.CRUD;
 
public class Users extends CRUD {
 
}
 


JPA関係

エンティティマネージャーを使う

// Categoryクラスと過程
// これだと上手くいかなかった環境によっては上手く行く?
Query query = JPA.em().createQuery("select * from Category ");
 
// 全カラムを取得する場合、List<モデル>で受け取れる
Query query = JPA.em().createQuery("from Category "); // OK
List<Category> list = query.getResultList();
// 一行だけの場合、getSingleResultでモデルのまま取得できる
Category category = query.getSingleResult();
 
// 単一カラムの場合Objectで受け取る
// 実際はLongやStringなどカラムや戻り値に応じた型が入っている
Query query = JPA.em().createQuery("select max(id1) from Category ");
Object obj = query.getSingleResult();
 
// 複数カラムの場合Objectの配列で受け取る
Query query = JPA.em().createQuery("select id1, name from Category ");
Object[] objs = (Object[])query.getSingleResult();
List<Object[]> list = (Object[])query.getResultList();
 

静的なファイルのルーティング

アプリケーションが、http://example.com/hello/のように、サーバのルートに配置されていない場合、配置されているディレクトリを正しく認識出来ないと画像やCSS等の静的なファイルに正しくリンクを張れなくなってしまう。

テンプレートの場合

以下のように、@{'静的なファイルのパス'}とすることで、正しいパスに変換される。
<img src="@{'/public/images/hoge.png'}"/><img src="/hello/public/images/hoge.png"/>
 
@を2つ並べると絶対パスに変換される。
<img src="@@{'/public/images/hoge.png'}"/><img src="http://example.com/hello/public/images/hoge.png"/>
 

JAVAの場合

テンプレートのルーティングは簡単だが、JAVA上で簡単にルーティングする方法を見つけられなかった。
とりあえず、以下のように無理やりなルーティングで解決させておく。
※Application.indexがアプリケーションのルートに設定されていると過程。
"<img src=\"" + Router.reverse("Application.index").url + "public/images/hoge.png" + "\"/>"<img src="/hello/public/images/hoge.png"/>
 
絶対パスを取得する場合
ActionDefinition ad = Router.reverse("Application.index");
ad.absolute();
"<img src=\"" + ad.url + "public/images/hoge.png" + "\"/>"<img src="http://example.com/hello/public/images/hoge.png"/>
 

チートシート(テンプレート)

コメント

*{ hogehoge }*
 

テンプレートタグ

タグを作成

ファイル名:/app/view/tags/topbar.html
<div style="float: left; width: 500px; height: 40px;">
	<a href="@{Application.index()}">
		<div style="font-size: 300%;line-height: 100%;">MoEメモ</div>
	</a>
</div>
<div style="float: left;">
	#{if session.get("loginUserId")}
		<a href="@{Memos.memoForm()}">マイページ</a>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
		<a href="@{Login.logout()}">ログアウト</a>
	#{/if}
	#{else}
		<a href="@{Application.signupForm()}">会員登録</a></br>
		<a href="@{Login.loginForm()}">ログイン</a>
	#{/else}
</div>
 

タグを使う

#{topbar /}
 

リバースルーティング

@{Application.index()} アクション
@{'/public/images/title.png'} 静的ファイル
@{Application.index(title)} パラメータを与える事も出来る
@@{Application.index()} @@でフルパス(http://example.com/~)
 
application.confに以下の設定を追加すると、フルパス時のURLを指定できる
%prod.application.baseUrl=https://memo-chapati.dotcloud.com/memo.war/
 

パラメータを出力する

${memo.title()}
 

パラメータがnullかもしれない場合

${memo?.title()}
 
パラメータの後に?を加えるとヌルポ防止になります。

エスケープしない場合

${memo.title().raw()}
 

フォーマットを指定する

${memo.date.format('yyyy/MM/dd')}