`

Play Framework 的模板引擎

阅读更多
Play 框架有自己的模板引擎来生成HTML页面,该引擎使用 Groovy 做为表达式语言。你可以直接使用 Groovy 语言来创建动态的网页,但并无需学习 Groovy 所有的知识,你需要了解的只是跟 Java 非常相近的一部分。Play 将所有的模板文件都放在 app/views 目录下,所有页面都是在请求时即时解析的。

接下来我们创建一个简单应用:

oschina@oschina.net:~/dev/play$ /usr/share/play/play new views
~        _            _
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/
~
~ play! 1.0.3, http://www.playframework.org
~
~ The new application will be created in /home/wichtounet/dev/play/views
~ What is the application name? Views
~
~ OK, the application is created.
~ Start it with : play run views
~ Have fun!
~

接下来检查生成的文件,进入 app/views 目录,我们可以看到下面这些内容:

    * Application : 存放应用主 controller 程序的模板
    * errors : 存放错误页面模板,例如 404、500等
    * main.html : 主页面模板

打开  Application/index.html ,代码如下:

#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}

第一行表明此模板扩展自 main.html,接下来使用了 Play 框架的 set 指令来设置页面的标题,这些指令都要进行关闭,最后一行打印一行欢迎信息。

然后我们再来看看 main.html 模板:

<!DOCTYPE html>

<html>
    <head>
        <title>#{get 'title' /}</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <link rel="stylesheet" type="text/css" media="screen" href="@{'/public/stylesheets/main.css'}">
        #{get 'moreStyles' /}
        <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}">
        <script src="@{'/public/javascripts/jquery-1.4.2.min.js'}" type="text/javascript" charset="utf-8"></script>
        #{get 'moreScripts' /}
    </head>
    <body>
        #{doLayout /}
    </body>
</html>

这个模板中包含一些特殊的指令:

    * #{get ‘title’ /} : 获取变量 title 的值,该值仅在模板页面中有效
    * @{‘/public/stylesheets/main.css’} : 引入某个静态资源
    * #{doLayout /} : 此处插入子模板的内容,在本例中就是前面提到的 index.html 页面,index.html 扩展自 main.html

如何在模板间传递参数呢?

传递参数很重要,例如我们在 controller 中读取一些数据,并将这些数据传递到 view 中进行显示。在 Play 框架中可以使用 render 方法来处理,例如:

package controllers;

import play.mvc.*;

public class Application extends Controller {
    public static void index() {
        String hello = "Hello World from Controller !";

        render(hello);
    }
}

index 方法中向模板传递了一个名为 hello 的变量,要在模板中获取这个变量的值,只需 ${hello} 即可:

#{extends 'main.html' /}
#{set title:'Home' /}

Hello from the view
<br />
${hello}

怎样,很简单吧?

来个更复杂点的类吧

package models;

public class Book {
    private final String title;

    public Book(String title) {
        super();

        this.title = title;
    }

    public String getTitle() {
        return title;
    }
}

然后在 controller 传递此类的实例:

public static void index() {
    Book book = new Book("Hello Play !");
    render(book);
}

接下来在模板中获取该对象

#{extends 'main.html' /}
#{set title:'Home' /}

Hello from the view
<br />
I've a book for you "${book.title}".

这里使用了 JavaBean 的 getting 方法,因此我们的Bean 必须有 getTitle 方法。

所有动态内容的输出,Play 框架都做了转码处理,以防止XSS跨站点攻击,如果你不想这样做,那么可使用 raw() 方法,例如

${book.title.raw()}

但这不是一个好习惯,仅在你确认会带来什么后果时才使用。

模板的注释方式如下:

*{Will not be evaluated by the template engine}*

数组和列表

在实际使用过程中,列表和数组是经常要用到的,下面是一个传递列表的实例:

public static void index() {
        List<Book> books = new ArrayList<Book>(3);
        books.add(new Book("Hello Play !"));
        books.add(new Book("Hello Template !"));
        books.add(new Book("Hello Engine !"));
        render(books);
}

模板中使用该列表对象的代码如下:

#{extends 'main.html' /}
#{set title:'Home' /}
I've some books for your :
<ul>
    #{list items:books, as:'book'}
        <li>${book.title}</li>
    #{/list}
</ul>

不是很复杂吧:)

使用脚本

如果你需要做更复杂的操作,我们可以在 Groovy 中使用脚本,在脚本中可以定义变量并可直接使用其他变量,例如:

#{extends 'main.html' /}
#{set title:'Home' /}
I've some books for your :
<ul>
    #{list items:books, as:'book'}
        %{
           bookTitle = book.title.toUpperCase();
        }%
        <li>${bookTitle}</li>
    #{/list}
</ul>

你可以做包括迭代、条件等一大堆复杂的事情,但记住,不要在模板中做过于复杂的功能,将这些业务逻辑放在 controller 或者是 models 中,模板应该越简单越好。

定义标签

Play 框架自带很多的标签,但你可以自己创建一些,为了创建标签,我们必须在views目录下创建名为 tags的子目录,例如我们创建一个 booklist.html 文件,存放在 views/tags 目录下,booklist.html 的代码如下:

<ul>
    #{list items:_items, as:'book'}
        %{
            bookTitle = book.title.toUpperCase();
        }%
        <li>${bookTitle}</li>
    #{/list}
</ul>

使用 '_' 来获取参数,本例中是 _items

有了这个自定义的tag,我们就可以将上面那个模板修改为:

#{extends 'main.html' /}
#{set title:'Home' /}
I've some books for your :
#{booklist items:books /}

尽量利用参数来使得 tag 更加灵活。

到此我们就介绍了 Play 模板的一些基本的要素,更多关于Play 框架的模板请看官方文档。
分享到:
评论

相关推荐

    基于Scala语言的Play Framework模板引擎Twirl设计源码

    该项目是基于Scala语言的Play Framework模板引擎Twirl设计源码,包含129个文件,涵盖49个HTML模板文件、38个Scala源文件、11个Markdown文档、8个SBT构建文件、4个YAML配置文件、3个PNG图片文件、3个Shell脚本、2个...

    Play framework框架

    Play Framework框架的架构是基于MVC模式的,分为模板引擎、控制器和模型三部分。模板引擎负责渲染页面,控制器负责处理请求和响应,模型负责存储和处理数据。该框架还提供了路由机制,用于将请求映射到对应的控制器...

    play framework api,play! framework api,play api

    1. **模块化设计**:Play Framework采用了模块化的设计,使得开发者可以方便地添加或替换特定功能,如模板引擎、持久化层等。 2. **异步编程**:Play Framework基于Akka框架,支持非阻塞I/O和异步处理,提高了Web...

    playframework中文教程.zip

    这个“playframework中文教程.zip”压缩包很可能是为了帮助中文用户更好地理解和学习Play Framework而准备的资源。 Play Framework 的主要特点包括: 1. **轻量级**:与传统的Java EE规范相比,Play Framework ...

    Play Framework Cookbook.pdf

    - **视图层开发**:讲解 Mustache 模板引擎的使用方法,以及如何实现动态页面的渲染。 - **安全性与认证**:探讨应用安全机制的设计与实现,包括用户认证、授权管理等。 - **测试与部署**:介绍单元测试、集成...

    Play Framework2本教程

    4. **模板引擎**:Play支持Ebean、JPA等多种持久化技术,同时提供了灵活的模板引擎,如Twirl,用于生成HTML页面。模板引擎允许你使用声明式语法来创建动态内容。 5. **异步编程**:Play基于Akka框架,支持非阻塞I/O...

    playframework 框架学习之路 1

    在“Playframework框架学习之路 1”中,我们可能要探讨这个框架的基础概念、安装过程以及如何创建一个简单的应用。下面将详细介绍Play Framework的关键知识点。 1. **快速开发**: Play Framework以其快速开发能力而...

    playFramework1.2.3

    在标题"playFramework1.2.3"中,我们关注的是Play Framework的1.2.3版本。这个版本是在其早期发展的一个稳定版本,提供了许多开发者友好的功能。 Play Framework的核心优势在于它采用了模型-视图-控制器(MVC)架构...

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

    而"playframework-2.7.9"可能是一个解压后的目录,其中包含了框架的全部源代码、库文件、示例项目、构建脚本等。 Play Framework的核心特性包括: 1. **异步编程模型**:Play Framework利用Akka Actor系统实现非...

    Play framework 2.0 -第一个应用程序

    《Play Framework 2.0 - 创建你的第一个应用程序》 Play Framework 2.0 是一个开源的Web应用框架,它基于Scala和...继续深入学习,你会发现更多关于路由、模板引擎、异步处理、安全控制以及与其他服务集成的强大功能。

    play,play framework资料大全

    这份文档通常会涵盖Play Framework的基本概念、安装步骤、项目结构、路由配置、模板引擎、控制器、模型、数据库集成、测试以及部署等核心内容。通过阅读这份文档,开发者可以全面了解Play Framework的各个方面,快速...

    Play-Utils是一个专门为PlayFramework开发的实用工具包模块

    在 Play Framework 中,模板引擎用于生成 HTML 输出。Play-Utils 提供了类型安全的助手方法,避免了模板中常见的类型转换错误,同时提供了更丰富的模板功能,如自定义标签和辅助函数。 2. **数据库操作增强**: ...

    play framework 框架手册 word 版

    6. **模板引擎**:Play提供了强大的模板引擎,支持表达式、装饰器、标签、动作、消息、注释、脚本等语法,便于构建动态视图。模板继承和自定义标签允许灵活的布局和功能扩展。 7. **数据验证**:Play提供了一套完整...

    play framework测试项目

    在1.X版本中,开发人员可以利用其提供的Action方法来处理HTTP请求,并通过模板引擎来生成HTML响应。 在Play Framework中,前端部分通常涉及到HTML、CSS和JavaScript。它支持使用CoffeeScript和LESS等预处理器语言,...

    Play Framework Cookbook Second Edition

    4. **模板引擎**:内置支持多种模板引擎,如 Scala 和 Java 的 Twirl,以及 Thymeleaf 等第三方模板引擎。 5. **异步处理**:利用 Future 和 Promise 等机制来处理异步任务,这对于构建高并发的应用程序尤为重要。 6...

    playframework学习资料

    4. **模板引擎**:Play 提供了强大的模板引擎,如Twirl,它允许开发者使用简单的语法在HTML中嵌入逻辑,同时保持代码的清晰和可读性。 5. **热部署**:Play Framework 支持热部署,这意味着开发者可以实时看到代码...

    Play Framework Essentials

    - **模板和视图**:学习使用模板引擎创建动态视图。 - **测试**:了解Play提供的测试工具和测试策略,编写单元测试和集成测试。 - **部署**:掌握如何将应用程序部署到不同的服务器或云平台。 #### Play框架与其它...

    play framework 框架个人笔记

    本文将深入探讨Play Framework的基本概念、常用命令、Eclipse调试方法、模式、控制器、工具包、session管理和模板引擎等方面。 1. **常用命令** - `play new &lt;项目名&gt;`:创建一个新的Play项目。 - `play run ...

    play framework 学生信息管理系统

    3. **模板(Templates)**:Play Framework 使用模板引擎来生成动态HTML页面。这些模板文件通常位于`app/views`目录下,结合了HTML和特定的模板语法,如Erb或Twirl,用于渲染视图。 4. **模型(Model)**:在MVC架构中...

Global site tag (gtag.js) - Google Analytics