Groovy模板引擎上(基础模板介绍)

原文链接 作者:groovy团队  译者:树下偷懒的蚁

1.简介
Groovy支持多种方式动态的生成文本譬如:GStrings, printf(基于Java5),MarkupBuilder 。除此之外,模板框架则是非常适用基于静态模板生成文本的应用程序。

2.模板框架

在Groovy中,模板框架包含TemplateEngine抽象基类(引擎必须实现),Template接口(引擎生成的模板必须实现)。

Groovy包含的以下几种模板引擎:

  • SimpleTemplateEngine -基础模板引擎
  • GStringTemplateEngine -将模板作为可写的闭包 (适用于流操作)
  • XmlTemplateEngine -适用于输出XML格式的模板引擎
  • MarkupTemplateEngine – 非常完整优化的模板引擎

3. SimpleTemplateEngine

SimpleTemplateEngine允许在模板中使用类似JSP风格的代码(如下例),脚本和EL表达式。样例

import groovy.text.SimpleTemplateEngine

def text = 'Dear "$firstname $lastname",\nSo nice to meet you in <% print city %>.\nSee you in ${month},\n${signed}'

def binding = ["firstname":"Sam", "lastname":"Pullara", "city":"San Francisco", "month":"December", "signed":"Groovy-Dev"]

def engine = new SimpleTemplateEngine()
template = engine.createTemplate(text).make(binding)

def result = 'Dear "Sam Pullara",\nSo nice to meet you in San Francisco.\nSee you in December,\nGroovy-Dev'

assert result == template.toString()

 

然而,通常在模板中混入业务逻辑不是良好的习惯。但是有时一些简单的逻辑是有用的。上述的例子中,我们可以修改一下:

$firstname

可以改为(假设模板已经import了capitalize)

${firstname.capitalize()}

或者这样

<% print city %>

改为:

<% print city == "New York" ? "The Big Apple" : city %>

3.1.高级应用说明

如果直接将模板嵌入到脚本中(如我们上面做的那样),必须小心反斜杠转义。模板中的字符串在传入到模板框架之前需要Groovy解析,而GString表达式以及脚本代码作为Groovy程序的一部分,必须要转义反斜杠。例如,想用引号把 The Big Apple引起来,可以这样做:

<% print city == "New York" ? "\\"The Big Apple\\"" : city %>

相似的,如果想新起一行,我们可以这样用:

\\n

“\n” 可以在静态模板文本中使用,也可以在外部模板文件中使用。同样,如果要显示反斜线本身,要用:

\\\\

在外部文件中:

\\\\

4.GStringTemplateEngine

使用GStringTemplateEngine的方法,和上述的例子有点类似(显示更多的参数)。首先,我们将模板存在文件中:

test.template

Dear "$firstname $lastname",
So nice to meet you in <% out << (city == "New York" ? "\\"The Big Apple\\"" : city) %>.
See you in ${month},
${signed}

注意:我们使用out替代print支持GStringTemplateEngine的流特性。因为我们将文件存储在单独的文件中,所以不需要转义反斜线。调用过程如下:

def f = new File('test.template')
engine = new GStringTemplateEngine()
template = engine.createTemplate(f).make(binding)
println template.toString()

输入结果如下:

Dear "Sam Pullara",
So nice to meet you in "The Big Apple".
See you in December,
Groovy-Dev

5. XmlTemplateEngine

XmlTemplateEngine适用于输入模板输出结果都是XML样式的场景。可以在模板的任意表达式中使用${expression} 和 $variable符号。同时也支持特殊的标签:<gsp:scriptlet> (用户插入代码片段) and <gsp:expression> (用于输入结果的代码片段).

注解和处理指令在处理的过程中会被移除,同时特殊的XML符号比如:<,>, " 和 '会被相应的XML符号转义。输出结果将按照标准的XML输出格式进行缩进。gsp:tags 定义的Xmlns命名空间会被移除但是其他的命名空间将会被保留(可能转换成XML树中等效的结果)。

正常情况下,模板原文件会保存在单独的文件中,但是下面的例子提供一个String类型的XML模板。

def binding = [firstname: 'Jochen', lastname: 'Theodorou', nickname: 'blackdrag', salutation: 'Dear']
def engine = new groovy.text.XmlTemplateEngine()
def text = '''\
 <document xmlns:gsp='http://groovy.codehaus.org/2005/gsp' xmlns:foo='baz' type='letter'>
 <gsp:scriptlet>def greeting = "${salutation}est"</gsp:scriptlet>
 <gsp:expression>greeting</gsp:expression>
 <foo:to>$firstname "$nickname" $lastname</foo:to>
 How are you today?
 </document>
'''
def template = engine.createTemplate(text).make(binding)
println template.toString()

输出结果如下:

<document type=’letter’> Dearest <foo:to xmlns:foo=’baz’> Jochen &quot;blackdrag&quot; Theodorou </foo:to> How are you today? </document>

6. The MarkupTemplateEngine

此模板引擎主要适用于生成XML风格类似的标记(XML, XHTML, HTML5, …),但是也可以用于生成任意文本。和传统的模板引擎不同的是,此模板引擎基于DSL。如下模板样例:

xmlDeclaration()
cars {
   cars.each {
       car(make: it.make, model: it.model)
   }
}

如果用下面的数据模型填充:

model = [cars: [new Car(make: 'Peugeot', model: '508'), new Car(make: 'Toyota', model: 'Prius')]]

渲染的结果:

<?xml version='1.0'?> <cars><car make='Peugeot' model='508'/><car make='Toyota' model='Prius'/></cars>

此模板引擎的主要特点:

  • 标记构建器风格的语法
  • 模板编译成字节代码
  • 渲染迅速
  • 可选择的模板数据类型校验
  • 包含
  • 国际化支持
  • 碎片化/布局
时间: 2024-09-19 09:30:31

Groovy模板引擎上(基础模板介绍)的相关文章

PHP模板引擎SMARTY_php基础

用PHP实现MVC开发模式的逻辑层和表示层有多种模板引擎可供选择, 但是官方引擎SMARTY诞生后,选择就有了变化.它的理念和实现都是 相当"前卫"的.本文主要讨论SMARTY之于其他模板引擎的不同特点, 简要介绍了该引擎的安装及使用,并用一个小的测试案例对比了 SMARTY和PHPLIB template的速度和易用性. 一.MVC需要模板 MVC最早是在SmallTalk语言的开发过程中总结出的一种设计模式,MVC分别代 表了"模型"."视图"

php_smarty模板引擎与.NET_VTemplate模板引擎有什么区别

首先在写这篇文章前,先和大家分享一句话: "现在能做什么就认真的去做吧,未来的事情不用担心了". 哈,这句话,其实真的是想告诉自己而已,在博客上写着PHPer,那个时候还真的是以为会一直写PHP,没想到,今天改成了ASP.NET. 好,其他就不说了,说不定以后也有PHPer会转到ASP.NET或者ASP.NET转到PHP也不一定哈.所以,今天写下这篇文章,让对smarty非常熟悉的我和VT模板来对比对比. 我一直相信,学新的技术语言只有在对比自己非常熟悉的语言之后学的会更快,更有印象.

smarty模板引擎基础知识入门_php实例

本文实例讲述了smarty模板引擎基础知识.分享给大家供大家参考.具体如下: 一.基本概念 1.什么是mvc? mvc是一种开发模式,核心思想是:数据的输入.数据的处理.数据显示的强制分离. 2.什么是smarty? smarty是一个php的模板引擎.更明确的来说,它可以帮助开发者更好的分离程序逻辑和页面显示. 3.smarty运行原理 模板文件,就是一个显示数据的模板,其中需要显示的数据用占位符代替. smarty运行时,会读取模板文件,将模板文件中的占位符替换成真正的数据,并输出一个处理后

asp模板引擎终结者(WEB开发之ASP模式)_ASP基础

阐述一种全新的ASP模板引擎,实现代码(逻辑)层与HTML(表现)层的分离.这种模板实现方法避免了一 般ASP模板加载模板文件(加载组件)和替换所浪费的资源,实现编译型的模板引擎,提高程序的执行速度和稳定性. 内容:        当前,WEB开发已经变得非常火爆,因为各种应用,已经约来越要求表现层和逻辑层的分离.ASP和HTML夹在一起程序将变得难于维护,可读性也差.在PHP领域,模板引擎已经非常普遍,如phplib,SMARTY,等等.有使用替换方式的,也有编译方式的(SMARTY),它们都

NodeJS创建基础应用并应用模板引擎_node.js

本次的目的是搭建一个最基础的可以实现功能的NodeJS服务器,能够体现出NodeJS的工作流程以及开发的基本框架. 需求:已经安装了nodejs以及express.一.构建基础的NodeJS服务器(express.路由) var express = require('express'); //引入express模块 var app = express(); //调用express()函数,对函数进行初始化 app.get('/stooges/:name?', function(req, res,

Twig模板引擎用法入门教程_php实例

本文实例讲述了Twig模板引擎用法.分享给大家供大家参考,具体如下: 介绍 Twig是一个灵活.高效并且安全的PHP模板引擎. 如果你使用过Smarty.Django或者Jinja这类基于文本的模板引擎的话,那么你会觉得Twig是很自然而然的事情.Twig严格遵守了PHP的信念,同时增加了在模板环境中很有用的函数,这些做法使得Twig不论是对设计师还是开发人员,都是非常友好的. Twig的主要特征有: 高效:Twig将模板编译成了优化了的PHP文件,与原生的PHP代码比较而言,性能损耗非常小.

使用TinyButStrong模板引擎来做WEB开发_php模板

使用TinyButStrong模板引擎来做WEB开发 /google 的广告条--> TinyButStrong是应用于4.0.6及以上PHP版本的专业和易用的模板引擎! TinyButStrong 简称TBS,中译为"小强",它是一个PHP类.仅仅包含8个方法3个特性.文件大小100K左右,却能实现超大型模板引擎同样的功能.支持WYSIWYG编写html模板(Dreamweaver .FrontPage等)非常直观方便. 本文将介绍TBS的初步用法.TinyButStrong手

详解Javascript模板引擎mustache.js_javascript技巧

本文总结它的使用方法和一些使用心得,内容不算很高深,纯粹是入门内容,看看即可.不过要是你还没有用过此类的javascript引擎库,那么本文还是值得你一读的,相信在你了解完它强大的功能和简单用法之后,一定会迫不及待地将之用于你的工作当中. 1. 从一个简单真实的需求讲起目前公司做了一个统一的开发平台,后台封装了MVC的接口和数据增删改查的接口,前端我自己用bootstrap+手写各类组件的方式弄了一套开发框架:集成了CAS,在CAS的基础上,首先做了一套统一权限管理系统,这个系统是我们开发平台的

详解模板引擎工作机制

本文讲的是详解模板引擎工作机制, 我已经使用各种模版引擎很久了,现在终于有时间研究一下模版引擎到底是如何工作的了. 简介 简单的说,模版引擎是一种可以用来完成涉及大量文本数据的编程任务的工具.一般而言,我们经常在一个 web 应用中利用模板引擎来生成 HTML .在 Python 中,当你想使用模板引擎的时候,你会发现你有不少的选择,比如jinja 或者是mako.从现在开始,我们将利用 tornado 中的模板引擎来讲解模板引擎的工作原理,在 tornado 中,自带的模板引擎相对的简单,能方