Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Locked History Actions

Play/Begin

簡単なアプリの作成

****
このサンプルは中止。play scala0.9.1からはscala templatesというものが導入され、 標準のテンプレート作成方法はそちらに移行するらしい
****

方針

既存のデータベース(PostgreSQL)データをメンテナンスするための社内用の簡単なアプリを作成する。

  • コードはSubversionで管理する。
  • テンプレートhtmlは入れ子機能と置換機能しか使用しない。テンプレート内での条件分岐や数式等は必要ない。
  • 既存データベースのスキーマは変更しない。
  • 社内で利用するためのものなので、デザイン等には凝らない。

テンプレート側

デコレータの使い方

複数ページにわたって同じデザインを用いるのはデコレータを使うのが簡単だが、指定方法は少々わかりにくい。例えば、 commonFrame.htmlの中にuserList.html等を埋め込むには、commonFrame.htmlを

<html>
<body>
...
#{doLayout/}
...
</body>
</html>

などとして、#{doLayout/}部分に各ページが埋め込まれるようにする。埋め込まれる側のuserList.htmlは

#{extends 'commonFrame.tml'/}

などと記述すればよいのだが、しかしこの行はuserList.htmlのどこにあってもよい。また、複数のextendsを記述すると、エラーは出ず、最も最後のものが有効になる。

#{extends 'commonFrame.tml'/}
#{extends 'anotherFrame.tml'/} <!-- これが有効 -->

であるから、extendsはファイルの最初に記述するよう習慣づけるのがよいと思われる。

不明点

デコレータファイルのパスを指定する方法が不明。そもそもデフォルトで作成されるアプリは、

views
 +-- main.html
 +-- Application
  +-- index.html

となっているが、なぜindex.htmlに#{extends 'main.html'/}と記述するとmain.htmlを指すことになるのか説明がない。

置換

${}の中に式を記述するとそれが展開されるらしい。が、とりあえずは単に「変数」を記述し、その変数値をプログラム側で設定すればよい。

${variable}

ただし、これは常にエスケープされるため、エスケープされないようにするには次のようにする。

${variable.raw}

プログラム側