freemarker 空白处理
1 一个简短的引论
HTML 和 XML 都不是对空白敏感的,可是这么多多余的空白是非常令人头疼的,并且添加处理后的 HTML 文件大小也是不是必需的。当然,对于空白敏感的方式的输出这依然是个大问题。
FreeMarker 提供以下的工具来处理这个问题:
- 忽略某些模板文件的空白的工具(解析阶段空白就被移除了):
- 剥离空白:这个特性会自己主动忽略在 FTL 标签周围多余的空白。这个特性能够通过模板来随时使用和禁用。
- 微调指令: t , rt 和 lt ,使用这些指令能够明白地告诉 FreeMarker 去忽略某些空白。能够阅读參考手冊来获取很多其它信息。
- FTL 參数 strip_text :这将从模板中删除全部顶级文本。
对模板来说这非常实用,它仅仅包括某些定义的宏(还有以他一些没有输出的指令),由于它能够移除宏定义和其它顶级指令中的换行符,这样能够提高模板的可读性。
- 从输出中移除空白的工具(移除临近的空白):
- compress 指令
- 缩进空白和在行末尾的尾部空白(包括换行符)将会被忽略,仅仅会留下 FTL 标签(比方 <@myMacro/> , <#if ...> )和 FTL 凝视(如 <#-- blah --> ),除了被忽略的空白本身。比如,假设一行仅仅包括一个 <#if ...> ,那么在标签前面的缩进和标签后面的换行符将会被忽略。然而,假设这行上包括 <#if ...>x ,那么空白就不会被忽略,由于这个 x
不是 FTL 标签。注意,依据这些规则,一行上 包 含 <#if ...><#list ...> , 空 白 就 会 被 忽 略 , 而 一 行 上 有<#if ...> <#list ...> 这种就不会,由于在两个 FTL 标签之间的空白
是嵌入的空白,而不是缩进的或尾部空白。 - 加在以下这些指令之间的空白会被忽略: macro , function , assign ,global , local , ftl , import ,但也是只指令之间唯独一个空白或 FTL凝视。实际应用中,它意味着你能够在宏定义和參数定义之间放置空行,由于行间距是为了更好的可读性,不包含打印不必要的空行(换行符)。
注意开启剥离空白时不会减少模板运行的效率,剥离空白的操作在模板载入时就已经完毕了。
它会非常强势地移除缩进,空行和反复的空格/制表符(能够阅读參考手冊部分来获取很多其它信息)。
所以对于以下这段代码:
<#compress>
<#assign users = [{"name":"Joe","hidden":false},
<span style="white-space:pre"> </span>{"name":"James Bond", "hidden":true},
<span style="white-space:pre"> </span>{"name":"Julia","hidden":false}]>
List of users:
<#list users as user>
<#if !user.hidden>
- ${user.name}
</#if>
</#list>
That's all.
</#compress>
List of users:
- Joe
- Julia
That's all.
在默认情况下,名为 compress 的用户自己定义指令是能够在数据模型中存在的(因为向下兼容特性)。这和指令是同样的,除了能够选择设置 single_line 属性,这将 会 移 除 所 有 的介 于 其 中的 换 行 符 。在 最 后 那 个例 子 中 , 假设 使 用 <@compress
single_line=true>...</@compress>来取代<#compress>...</#compress> ,那么就会得到例如以下输出:
List of users: - Joe - Julia That's all.
版权声明:本文博主原创文章。博客,未经同意不得转载。
freemarker 空白处理的更多相关文章
- [转]一篇很全面的freemarker教程
copy自http://demojava.iteye.com/blog/800204 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主 ...
- 一篇很全面的freemarker教程
以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成:1,文本:直接输出的部分2,注释:<#-- ... --& ...
- FreeMarker的教程
copy自http://demojava.iteye.com/blog/800204 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主 ...
- FreeMarker备忘
以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: ,文本:直接输出的部分 ,注释:<#-- ... --& ...
- 【转】一篇很全面的freemarker教程---有空慢慢实践
FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输 ...
- 五、案例-指令参考-freemarker指令、表达式
案例-指令参考描述:本人自己测试写了一遍,如有错的地方,懂freemarker的朋友望指点指点! 案例-指令参考 表达式 一. Assign 1.<#assign name1="北京& ...
- FreeMarker笔记 第四章 其它
4.1 自定义指令 4.1.1 简介 自定义指令可以使用macro指令来定义.Java程序员若不想在模板中实现定义指令,而是在Java语言中实现指令的定义,这时可以使用freemarker.templ ...
- 三、FreeMarker 模版开发指南 第三章 模版
章节内容如下: 总体结构 指令 表达式 插值 一.总体结构 实际上你用程序语言编写的程序就是模板,模板也被称为FTL(代表FreeMarker模板语言).这是为编写模板设计的非常简单的编程语言. ...
- freemarker入门教程
FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输 ...
随机推荐
- as3文本框的动态拖拽和编辑
如今非常多软件都支持了编辑界面的文本拖拽和点击编辑来直接改动数值, 这样便于操作, 并且体验性也好, 抛砖引玉吧 于是就用好久没编写的as3来写了一下: 由于用的flash ide写的没有提示, 就临 ...
- Android KitKat 4.4 Wifi移植AP模式和网络共享的调试日志
Tethering技术在移动平台上已经运用的越来越广泛了.它能够把移动设备当做一个接入点,其它的设备能够通过Wi-Fi.USB或是Bluetooth等方式连接到此移动设备.在Android中能够将Wi ...
- testlink于smarty配置和使用
于testlink于,采用smarty首先配置. 一般在过程化的编程中.创建一个smarty.inc.php的文件来配置Smarty的信息,其它文件引入就可以,目的是为了不改动smarty.class ...
- 最佳新秀SSH十六Struts2它是如何工作的内部
前面说完了Spring.Hibernate,非常自然今天轮到struts了.struts的核心原理就是通过拦截器来处理client的请求,经过拦截器一系列的处理后,再交给Action.以下先看看str ...
- NOI 评价体系 arbiter 安装方法 常见的问题 移植
#!/bin/bash AppPath="$PWD" 读取当前文件夹 echo "Arbiter is installing..." sudo apt-ge ...
- Linux:闪光的宝石,智慧 (在)
Linux:闪光的宝石,智慧的结晶(上) 老实说,这十几天以来.因为我违反了"家规",又被断网处罚(拔掉网线).没收手机与老年证(不许出家门). 因此.我平日里仅仅能面对一篇文章& ...
- js多物体任意值运动
假如有两个div,一个div要变宽,一个div要变高,你怎么写呢? 哎呀,写2个方法啊,一个控制div1变宽,一个控制div2变高啊 那么你的代码,是不是下面这样的呢! 示例:Div变宽和变高 现象: ...
- Java OCR tesseract 图像智能字符识别技术 Java代码实现
接着上一篇OCR所说的,上一篇给大家介绍了tesseract 在命令行的简单用法,当然了要继承到我们的程序中,还是需要代码实现的,下面给大家分享下java实现的例子. 拿代码扫描上面的图片,然后输出结 ...
- BZOJ 2007 NOI2010 海拔高度 最小减产计划
标题效果:YT城市是一个精心规划的城市.这个城市是东西向和南北向干道成n×n地区性.简单.可以YT作为一个城市广场,每个区域也可被视为一个正方形.因此,.YT市中含有(n+1)×(n+1)交叉口和2n ...
- 【Web探索之旅】第四部分:Web程序员
内容简介 1.第四部分第一课:什么是Web程序员? 2.第四部分第二课:如何成为Web程序员? 3.第四部分第三课:成为优秀Web程序员的秘诀 第四部分:Web程序员(完结篇) 大家好.终于来到了[W ...