Play2.xのScala Templatesを使ったController&View(scala初心者)
conf/routesに、route設定を書く
GET /show controllers.TemplateController.show()
app/controllers/TemplateController.scalaを作成
package controllers import play.api._ import play.api.mvc._ object TemplateController extends Controller { def show = Action { //果物名一覧 val list = List[String]("lemon", "mikan", "budou", "ringo") //表示 Ok(views.html.show("Hello Scala Templates!",list)) } }
app/views/show.scala.htmlを作成
//views.html.showの第一引数を@messageに、第二引数を@userListに @(message:String,userList:List[String]) @main("show scala templates") { <h1>@message</h1> <ul> @for(user <- userList) { <li><p>@user</p></li> } </ul> }
ここには、html,head,bodyは書かない。
play run
ブラウザで、以下のURLを開くと http://localhost:9000/show
Hello Scala Templates! lemon mikan budou ringo
と表示されます。 ソースコードを見てみると
<!DOCTYPE html> <html> <head> <title>show scala templates</title> <link rel="stylesheet" media="screen" href="/assets/stylesheets/main.css"> <link rel="shortcut icon" type="image/png" href="/assets/images/favicon.png"> <script src="/assets/javascripts/jquery-1.9.0.min.js" type="text/javascript"></script> </head> <body> <h1>Hello Scala Templates!あ</h1> <ul> <li><p>lemon</p></li> <li><p>mikan</p></li> <li><p>budou</p></li> <li><p>ringo</p></li> </ul> </body> </html>
さっき書かなかった、html,head,bodyが これは app/views/main.scala.html内の
@content
にさっき作ったshow.scala.htmlの内容が展開されているからである。
他の言語の、フレームワークでもレイアウトファイル、テンプレートファイルと同じで main.scala.htmlをレイアウトファイル show.scala.htmlをテンプレートファイルとしたからです。