本文来自fair-jm.iteye.com 转截请注明出处
这一章内容比较少:
模板的写法类似于jsp的写法 这里记得笔记就相对少了很多
第一行是参数列表 可以通过action传参
一个简单的例子:
@(title: String)(content: Html)(implicit lang:Lang,flash:Flash,request:Request[_]) <!DOCTYPE html> <html> <head> <title>@title</title> <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")"> <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/bootstrap.css")"> <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")"> <link type="image/png" href="@routes.Assets.at("images/glyphicons-halflings-white.png")"> <link type="image/png" href="@routes.Assets.at("images/glyphicons-halflings.png")"> <script src="@routes.Assets.at("javascripts/jquery.min.js")" type="text/javascript"></script> <script src="@routes.Assets.at("javascripts/bootstrap.js")" type="text/javascript"></script> </head> <body> <div class="navbar navbar-inverse"> <div class="navbar-inner"> <div class="container"> <a class="brand" href="@routes.Application.index()">@Messages("application.name")</a> <div class="nav-collapse collapse"> <ul class="nav"> <li @if(request.path==routes.Application.index().toString){class="active"}><a href="@routes.Application.index()">@Messages("application.home")</a></li> <li><a href="/thread/">talk</a></li> <li><a href="/user/">rate</a></li> </ul> <ul class="nav pull-right"> @if(!request.session.get(Users.user).nonEmpty){ <li @if(request.path==routes.Users.register().toString){class="active"}><a href="@routes.Users.register()">@Messages("user.register")</a></li> <li @if(request.path==routes.Users.login().toString){class="active"}><a href="@routes.Users.login()">@Messages("user.login")</a></li> }else{ <li><a href="@routes.Users.show(request.session.get(Users.user).getOrElse("-1").toLong)">@request.session.get(Users.username).getOrElse("")</a></li> <li><a href="@routes.Users.logout()">@Messages("user.logout")</a></li> } </ul> </div> </div> </div> </div> <div class="container"> @content </div> </body> </html>
在模板中@是个特殊的符号 想显示@的话可以写成@@
注释写成@* *@(不会生成html注释)
所有的scala表达式都是被转义的 也就是如果String含有HTML标签不会被解析而是会显示出来(显示Raw Html)
但如果想要被渲染 要用@Html(content) 来显示
@{ <b>hello</b> }
这样页面显示会被渲染的 因为:scala.xml.NodeSeq会被渲染
@{ "<b>hello</b>" }
这样还是显示<b>hello</b>
变量的作用域仅限在当前的表达式(也就是一个@) 不想反复写可以用@defining:
@defining(article.countReview()) { total => <h3>This article has been reviewed @total times</h3> <p>@(article.countPositiveReviews()) out of these @total reviews were positive!</p> }
这样就不用在@total的地方重复写article.countReview()了
对应关系 :
views/robots.scala.txt -> views.txt.robots
views/users/profilepage/avatar.scala.html -> views.html.users.profilepage.avatar.
这边的对应关系指的是在action渲染模板时用的位置 例如模板文件放在了 views/user/下名字为 login.scala.html 那么在action中的写法是:
def login = Action{ implicit request => if(!request.session.get(Users.user).isDefined){ val form = loginForm Ok(views.html.user.login(form)) }else{ Ok("login,"+request.session.get(Users.user)) } }
国际化:
国际化移除和地区相关的代码 本土化用地区相关版本的文件来作为app的内容 在应用程序中两者都是要用到的
在conf下放置messages.LANG的文件
代码中使用:Messages("users.login")(Lang("en")) 第二个参数的Lang是implicit的 在controller中的Action 用implicit request 就可以了 locale的信息在Accept-Language中
message文件中使用的是java.text.MessageFormat的格式
一些我遇到过的较为复杂的操作:
<div class="col-md-9"> @{ articles collect { case (title,time,shortcontent) => { Html(s""" <div class="blog-post"> <h2 class="blog-post-title"> $title </h2> <p class="blog-post-meta"> $time </p> <p> $shortcontent </p> <hr/> </div> """) } } } </div>
直接用字符串的形式构造出内容 在通过Html函数转化为html标签
在main中传入多个Html:
注意了参数的Html不能用()包围 不然不会被转成HTML 而是会被转成 scala.xml.Elem
main的参数可以:
@(title: String,moreScript:Html = Html(""))(content: Html)
接着在要导入的模板中用:
@moreScript = { <script src="@routes.Assets.at("javascript/bootstrap-markdown.js")"></script> } @main(Messages("article.new.blog"),moreScript){ … … }
相关推荐
Play Framework最新教程(12年),play框架教程
play framework api,play! framework api,play api
play2-war-plugin, 用于 Play Framework 2.x的WAR插件 用于 Play Framework 2.x的 WAR插件Current versions: Play 2.2.x : 1.2.1 Play 2.3.0 -> 2.3.1 : 1.3-beta1 (Scala 2.1
Play Framework Cookbook.pdf
1. Play Framework 介绍 2. 创建和发布 Play 应用 2.1 创建 Play 的工程 2.2 Play 常用指令 2.3 Play 应用的 JVM 调优 3. 如何读取静态资源 4. Play框架的配置文件 5. 使用 Play 框架开发 Java 应用 5.1 HTTP...
playframework javaweb playframework javaweb
Mastering Play Framework for Scala
play framework的一些学习总结,基本概念理解,常用的学习方法等。
Playframework 1.2.7 sdk zip包
play framework2.01上半部分。
Play framework框架
PlayFramework框架验证.pdf
Play Framework Cookbook
通过简单的代码和思路写了play framework的简单的小例子,包括添加页面进行的routes配置,页面跳转,页面之间的数据传递等方面。暂时未使用h2内置数据库及ArrayList、HashMap在页面之间的数据传递。
Play Framework Essentials 英文原版,学习 play 框架的最佳入门。
PlayFramework框架安全模块.pdf
Leverage the awesome features of Play Framework to build scalable, resilient, and responsive applications First published: May 2015 274page
Play框架肩负了臃肿的企业级java ee规范,易restful为目标专注于开发效率,是java敏捷开发的最佳参考方案
play framework2.01 下半部分
Play Framework Cookbook playframework,play! 书中范例代码下载地址: https://github.com/spinscale/play-cookbook 292 pages Publisher: Packt Publishing (September 4, 2011) Language: English ISBN-10: ...