コントローラーとビューを使おう![Scala編] (1/5)
作成:2013-01-21 08:02
更新:2013-01-21 08:02
更新:2013-01-21 08:02
■Applicationとindexをカスタマイズする
では、実際にコントローラーとビューをカスタマイズして、オリジナルの表示を作ってみましょう。まずは、「コントローラーでビューテンプレートをレンダリングし表示する」という基本からです。
前回、説明したように、画面の表示は2つのビューテンプレートとして用意され、コントローラーのアクションクラスでそれをレンダリングし表示していました。このとき、必要に応じてテキストなどの値をテンプレート側に受け渡すことができました。この基本を行なってみましょう。
画面全体の基本的な構成となるmain.scala.htmlは、このまま変更する必要はないでしょう。Applicationコントローラーのindexと、index.scala.htmlだけ修正すればよいでしょう。また、デフォルトの表示では味気ないので、スタイルシートも用意しておくことにしましょう。「public」フォルダ内にある「stylesheets」フォルダの中に、「main.css」というスタイルシートファイルがあります。これが、main.scala.htmlで使用されるスタイルシートファイルです。これにスタイルシートの情報を記述しておけば、main.scala.htmlで適用されます。
下のリスト欄にそれぞれのファイルの修正を掲載しておきます。アクセスすると、「サンプルページ」というタイトルに「これはテストで作ったページです」とテキストが表示されます。実際に動作を確認しておきましょう。
ここでのポイントは、アクションメソッドからテンプレートへとどのように値が受け渡されていくか、です。まず、アクションの呼び出し部分を見てみましょう。
前回、説明したように、画面の表示は2つのビューテンプレートとして用意され、コントローラーのアクションクラスでそれをレンダリングし表示していました。このとき、必要に応じてテキストなどの値をテンプレート側に受け渡すことができました。この基本を行なってみましょう。
画面全体の基本的な構成となるmain.scala.htmlは、このまま変更する必要はないでしょう。Applicationコントローラーのindexと、index.scala.htmlだけ修正すればよいでしょう。また、デフォルトの表示では味気ないので、スタイルシートも用意しておくことにしましょう。「public」フォルダ内にある「stylesheets」フォルダの中に、「main.css」というスタイルシートファイルがあります。これが、main.scala.htmlで使用されるスタイルシートファイルです。これにスタイルシートの情報を記述しておけば、main.scala.htmlで適用されます。
下のリスト欄にそれぞれのファイルの修正を掲載しておきます。アクセスすると、「サンプルページ」というタイトルに「これはテストで作ったページです」とテキストが表示されます。実際に動作を確認しておきましょう。
■受け渡す変数の流れをチェックする
ここでのポイントは、アクションメソッドからテンプレートへとどのように値が受け渡されていくか、です。まず、アクションの呼び出し部分を見てみましょう。
Ok(views.html.index(title, msg))2つの変数が引数に渡されていることがわかりますね? では、これをindex.scala.html側でどう受け取っているか見てみましょう。
@(title: String, message: String)こうなっています。これで第1引数の値がtitleに、第2引数がmessageにそれぞれ渡されるのです。――いかがですか? 基本さえわかれば、コントローラーからビューへ必要な値を送るのはそれほど難しくないでしょう? 渡す値が増えたら、引数をどんどん追加すればいいのですから、意外と簡単です。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
●Application.scala
package controllers
import play.api._
import play.api.mvc._
object Application extends Controller {
def index = Action {
val title = "サンプルページ"
val msg = "サンプルのページです。"
Ok(views.html.index(title, msg))
}
}
●index.scala.html
@(title: String, message: String)
@main(title) {
@main(message){
<h1>@title</h1>
<p>@message</p>
}
}
●/public/stylesheets/main.css
body {
background-color = #FFCCCC;
color: #990000;
font-size: 12pt;
}
h1 {
color: #FFFFFF;
background-color: #990000;
font-size:18pt;
padding: 5px;
}
※関連コンテンツ