`

【playframework2笔记整理】3、template

 
阅读更多

本文来自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/main.scala.html -> views.html.main
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 Framework2本教程

    Play Framework2是一个强大的Java和Scala应用开发框架,它以其简洁的API、快速的开发周期以及对Web标准的紧密集成而闻名。本教程旨在为初学者和有经验的开发者提供全面的指导,帮助他们掌握Play Framework2的核心...

    playframework中文教程.zip

    Play Framework 是一个开源的Web应用框架,主要针对Java和Scala开发者设计,它的核心理念是简化开发流程,提高开发效率,并且特别强调了RESTful架构风格。这个“playframework中文教程.zip”压缩包很可能是为了帮助...

    Play Framework Cookbook.pdf

    目前最新的版本是 Play 2.x 系列,该版本在 Play 1.x 的基础上进行了全面改进,采用了更为先进的设计理念和技术栈。 - **主要特性**: - **非阻塞 I/O**:Play Framework 采用异步非阻塞 I/O,这意味着它可以处理...

    play framework api,play! framework api,play api

    2. **异步编程**:Play Framework基于Akka框架,支持非阻塞I/O和异步处理,提高了Web应用的并发性能。 3. **路由系统**:Play Framework的路由文件定义了URL到Action的映射,允许开发者灵活地控制请求处理逻辑。 4...

    Play framework框架

    Play Framework框架 Play Framework框架是一种基于Java的软件框架,旨在提高开发效率和提供REST式的架构风格。该框架可以让开发者继续使用他们喜欢的开发环境或繻库,不需要切换到另一种语言、IDE或者其他繻库。 ...

    play2-war-plugin, 用于 Play Framework 2.x的WAR插件.zip

    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 -&gt; 2.3.1 : 1.3-beta1 (Scala 2.1

    Play Framework

    1. Play Framework 介绍 2. 创建和发布 Play 应用 2.1 创建 Play 的工程 2.2 Play 常用指令 2.3 Play 应用的 JVM 调优 3. 如何读取静态资源 4. Play框架的配置文件 5. 使用 Play 框架开发 Java 应用 5.1 HTTP...

    play framework 框架个人笔记

    Play Framework 是一个开源的Web应用框架,以Java和Scala为后盾,致力于提供简洁、高效、可测试的开发体验。本文将深入探讨Play Framework的基本概念、常用命令、Eclipse调试方法、模式、控制器、工具包、session...

    Play Framework Cookbook

    ### Play Framework Cookbook 知识点解析 #### 一、Play Framework 概览 - **定义与背景**:Play Framework 是一款基于 Java 和 Scala 的高性能、轻量级 Web 开发框架。它采用 RESTful 架构设计,支持热重载功能,...

    Play Framework应用程序框架 v2.7.9.zip

    Play Framework是一款基于Java和Scala的开源Web应用框架,它遵循模型-视图-控制器(MVC)架构模式,旨在提供高效、简洁且可测试的开发环境。标题中的"v2.7.9"指的是该框架的特定版本,通常每个新版本会包含性能优化...

    playframework javaweb

    playframework javaweb playframework javaweb

    PlayFramework框架验证.pdf

    PlayFramework是一个高性能的Java和Scala框架,它支持Web应用的快速开发,并且主要面向RESTful应用程序。在PlayFramework中,为了确保数据的准确性和合法性,通常会在数据保存到数据库之前,对HTTP请求中的参数进行...

    playframework 框架学习之路 1

    Play Framework 是一个基于Java和Scala的开源Web应用框架,它遵循模型-视图-控制器(MVC)架构模式。在“Playframework框架学习之路 1”中,我们可能要探讨这个框架的基础概念、安装过程以及如何创建一个简单的应用...

    Mastering Play Framework for Scala

    Mastering Play Framework for Scala

    playFramework1.2.3

    2. **无XML配置**:Play Framework倾向于使用Java注解和纯代码配置,避免了XML配置文件的繁琐,降低了学习曲线,同时也减少了出错的可能性。 3. **简单的路由系统**:通过简单的 routes 文件,你可以定义URL与控制...

    Play framework 2.0 -第一个应用程序

    《Play Framework 2.0 - 创建你的第一个应用程序》 Play Framework 2.0 是一个开源的Web应用框架,它基于Scala和Java语言,遵循“模式-动作”(Action)架构,提供了一种轻量级、敏捷开发的方式。本篇文章将引导你...

    play framework2.01 part1

    play framework2.01上半部分。

    play,play framework资料大全

    Play Framework 是一个基于Java的开源Web应用框架,它遵循MVC(模型-视图-控制器)架构模式,致力于简化Web应用程序的开发过程。这个资料大全包含了许多关于Play Framework的重要资源,帮助开发者深入理解和高效使用...

    playframework框架项目部署文档

    《Play Framework框架项目部署详解》 Play Framework是一个强大的、基于Java和Scala的开源Web应用程序框架,它采用模型-视图-控制器(MVC)架构模式,以简洁的API和直观的开发体验受到开发者喜爱。本篇文章将详述...

    Play framework 2.0入门教程(三)的源代码,Play留言板

    Play Framework 2.0 是一个基于Java和Scala的开源Web应用程序框架,以其“写后即运行”的特性而闻名。这个入门教程的第三部分是关于如何使用Play Framework构建一个简单的留言板应用。在这里,我们将深入探讨Play ...

Global site tag (gtag.js) - Google Analytics