「Play Framework/メモ(1.2系)」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
* play framework メモ(1.2系)
* CRUDモジュールを使う(有効にする)
*** /conf/dependencies.ymlファイルに追加
#highlight(){{
require:
- play -> crud
}}
*** モジュールの有効化
#highlight(){{
play dependencies
}}
※別の端末にコピーした時もこの作業が必要です。
*** /conf/routesファイルに追加
#highlight(){{
# CRUD routes
* /admin/crud module:crud
}}
※パスは自由に変更できます。
*** CRUDコントローラ追加
*** 例 Userモデルのコントローラ
#highlight(){{
package controllers.cruds;
import models.User;
import controllers.CRUD;
public class Users extends CRUD {
}
}}
* JPA関係
*** エンティティマネージャーを使う
#highlight(){{
// 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等の静的なファイルに正しくリンクを張れなくなってしまう。
*** テンプレートの場合
以下のように、@{'静的なファイルのパス'}とすることで、正しいパスに変換される。
#highlight(){{
<img src="@{'/public/images/hoge.png'}"/>
↓
<img src="/hello/public/images/hoge.png"/>
}}
@を2つ並べると絶対パスに変換される。
#highlight(){{
<img src="@@{'/public/images/hoge.png'}"/>
↓
<img src="http://example.com/hello/public/images/hoge.png"/>
}}
*** JAVAの場合
テンプレートのルーティングは簡単だが、JAVA上で簡単にルーティングする方法を見つけられなかった。
とりあえず、以下のように無理やりなルーティングで解決させておく。
※Application.indexがアプリケーションのルートに設定されていると過程。
#highlight(){{
"<img src=\"" + Router.reverse("Application.index").url + "public/images/hoge.png" + "\"/>"
↓
<img src="/hello/public/images/hoge.png"/>
}}
絶対パスを取得する場合
#highlight(){{
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"/>
}}
* チートシート(テンプレート)
*** コメント
#highlight(){{
*{ hogehoge }*
}}
** テンプレートタグ
*** タグを作成
ファイル名:/app/view/tags/topbar.html
#highlight(){{
<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>
<a href="@{Login.logout()}">ログアウト</a>
#{/if}
#{else}
<a href="@{Application.signupForm()}">会員登録</a></br>
<a href="@{Login.loginForm()}">ログイン</a>
#{/else}
</div>
}}
*** タグを使う
#highlight(){{
#{topbar /}
}}
*** リバースルーティング
#highlight(){{
@{Application.index()} アクション
@{'/public/images/title.png'} 静的ファイル
@{Application.index(title)} パラメータを与える事も出来る
@@{Application.index()} @@でフルパス(http://example.com/~)
}}
application.confに以下の設定を追加すると、フルパス時のURLを指定できる
#highlight(){{
%prod.application.baseUrl=https://memo-chapati.dotcloud.com/memo.war/
}}
*** パラメータを出力する
#highlight(){{
${memo.title()}
}}
*** パラメータがnullかもしれない場合
#highlight(){{
${memo?.title()}
}}
パラメータの後に?を加えるとヌルポ防止になります。
*** エスケープしない場合
#highlight(){{
${memo.title().raw()}
}}
*** フォーマットを指定する
#highlight(){{
${memo.date.format('yyyy/MM/dd')}
}}