`
liyixing1
  • 浏览: 953083 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

freemarker

 
阅读更多
1.默认值
变量不存在或者为null是常常出现的情况。我们可以给它指定一个默认值。,通过在变量名
后面跟着一个!和默认值
<h1>Welcome ${user!"Anonymous"}!</h1>
另外默认值只是针对最后一级变量而言的。如果是多级变量如
animals.python.price!"0.00",那么如果animals或者python都null的话,那么结果依然是异常。为了防止这种情况可以使用(animals.python.price)!"0"
对于??也是同样用来的处理这种逻辑的:
animals.python.price??对比(animals.python.price)??来看。
使用形式概览: unsafe_expr!default_expr 或unsafe_expr! 或
(unsafe_expr)!default_expr 或(unsafe_expr)!
这个操作符允许你为可能不存在的变量指定一个默认值。
警告:
如果在!后面有复合表达式,如1 + x,通常使用括号,像${x!(1 + y)}或${(x!1)
+ y)},这样就根据你的意图来确定优先级。由于FreeMarker 2.3.x 版本的源码中的小失误
所以必须这么来做。!(作为默认值操作)的优先级非常低。这就意味着${x!1 + y}会
被FreeMarker 误解为${x!(1 + y)},而真实的意义是${(x!1) + y}。这个源码的
错误在FreeMarker 2.4 中会得到修正。在编程中注意这个错误,要么就使用FreeMarker 2.4!
如果默认值被省略了,那么结果将会是空串,空序列或空哈希表。(这是FreeMarker 允
许多类型值的体现)如果想让默认值为0 或false,则注意不能省略它。例如:


 默认值:name!"unknown" 或者(user.name)!"unknown" 或者
name! 或者 (user.name)!
 检测不存在的值:name?? 或者(user.name)??

2.当需要给插值或者指令参数提供值时,可以使用变量或其他复杂的表达式。例如,我们
设x 为8,y 为5,那么(x+y)/2 的值就会被处理成数字类型的值6.5
在我们展开细节之前,先来看一些具体的例子:
 当给插值提供值时:插值的使用方式为${expression},把它放到你想输出文
本的位置上然后给值就可以打印了。即${(5+8)/2}会打印”6.5”出来(如果输出
的语言不是英语,也可能打印出”6,5”)。

3.直接指定值
 字符串:"Foo" 或者 'Foo' 或者 "It's \"quoted\"" 或者
r"C:\raw\string"
 数字:123.45
序列:["foo", "bar", 123.45], 1..100
 哈希表:{"name":"green mouse", "price":150}等等。设置直接变量。

4.字符串转换成数字

${project.price?int}

5.比较
比较运算
有时我们需要知道两个值是否相等,或者哪个数的值更大一点。
为了演示具体的例子,我们在这里使用if 指令。if 指令的用法是:<#if
expression>...</#if>,其中的表达式的值必须是布尔类型,否则将会出错,模板
执行中断。如果表达式的结果是true,那么在开始和结束标记内的内容将会被执行,否则
就会被跳过。
测试两个值相等使用=(或者采用Java 和C 语言中的==,二者是完全等同的。)
测试两个值不等使用!=。例子中假设user 是”Big Joe”

6.检查值是否存在
使用形式概览:unsafe_expr??或(unsafe_expr)??
这个操作符告诉我们一个值是否存在。基于这种情况,结果是true 或false。
示例如下,假设并没有名为mouse 的变量:
<#if mouse??>
Mouse found
<#else>
No mouse found
</#if>
Creating mouse...
<#assign mouse = "Jerry">
<#if mouse??>
Mouse found
<#else>
No mouse found
</#if>
访问非顶层变量的使用规则和默认值操作符也是一样的,即product.color??和
(product.color)?? 。


7.插值
插值的使用语法是:${expression},expression 可以是所有种类的表达式
(比如${100 + x})。
插值表达式的结果必须是字符串,数字或日期类型的,因为只有数字和日期类型可以自
动转换为字符串类型,其他类型的值(如布尔,序列)只能手动转换为字符串类型,否则就
会发生错误导致模板执行中止。
如果插值在文本区(也就是说,不再字符串表达式中),如果escapse 指令起作用了,
即将被插入的字符串会被自动转义。如果你要生成HTML,那么强烈建议你利用它来阻止跨
站脚本攻击和非格式良好的HTML 页面。这里有一个示例:

<#escape x as x?html>
...
<p>Title: ${book.title}</p>
<p>Description:
<#noescape>${book.description}</#noescape></p>
<h2>Comments:</h2>
<#list comments as comment>
<div class="comment">
${comment}
</div>
</#list>
...
</#escape>

这个示例展示了当生成HTML 时,你最好将完整的模板放入到escape 指令中。那么,
如果book.title 包含&,它就会在输出中被替换成&amp;,而页面还会保持格式良好
的HTML。如果用户注释包含如<iframe>(或其它的元素)的标记,那么就会被转义成
如&lt;iframe&gt;的样子,使他们没有任何有害点。但是有时在数据模型中真的需要
HTML,比如我们假设上面的book.description 在数据库中的存储是HTML 格式的,
那么此时你不得不使用noescape 来抵消escape 的转义,模板就会像这样了:
<p>Title: ${book.title?html}</p>
<p>Description: ${book.description}</p>
<h2>Comments:</h2>
<#list comments as comment>
<div class="comment">
${comment?html}
</div>
</#list>


分享到:
评论

相关推荐

    freemarker 自定义freeMarker标签

    本篇将深入探讨如何自定义FreeMarker标签,以扩展其功能并适应特定项目需求。 首先,理解FreeMarker的默认标签语法至关重要。FreeMarker使用${...}表达式来插入变量,#{...}用于输出注释,以及、等控制结构进行条件...

    eclipse的freemarker插件

    而Freemarker则是一种轻量级的、基于模板的Java模板引擎,常用于Web应用中的动态内容生成,比如JSP替代技术。它允许开发者将业务逻辑与页面展示分离,提高代码的可维护性和可读性。 "eclipse的freemarker插件"是指...

    FreeMarker

    FreeMarker的设计理念是将表现层(视图)和业务逻辑层(控制器)分离,从而实现MVC(Model-View-Controller)架构中的“View”部分。 FreeMarker的核心概念是模板文件,这是一种特殊的文本文件,其中包含可替换的...

    freemarker-2.3.31-API文档-中文版.zip

    赠送jar包:freemarker-2.3.31.jar; 赠送原API文档:freemarker-2.3.31-javadoc.jar; 赠送源代码:freemarker-2.3.31-sources.jar; 赠送Maven依赖信息文件:freemarker-2.3.31.pom; 包含翻译后的API文档:...

    freemarker-2.3.28.jar

    这个"freemarker-2.3.28.jar"是Freemarker库的一个具体版本,版本号为2.3.28,它是Java的一个可执行的JAR(Java Archive)文件,用于在Eclipse集成开发环境中作为插件使用。 在Freemarker的2.3.28版本中,我们可以...

    freemarker解析成pdf

    1. **创建模板**:在Freemarker中,我们需要创建一个`.ftl`(Freemarker Template Language)文件,其中包含静态文本和动态占位符。动态占位符由${}或#{}包裹,用于插入数据模型中的值。例如,`${title}&lt;/h1&gt;`会将...

    FreeMarker2.3.23官方中文文档

    2.3.23是FreeMarker的一个稳定版本,这个版本的官方中文文档提供了全面的指导和说明,帮助开发者更好地理解和使用这个模板语言。 在FreeMarker的核心概念中,它是一个基于数据驱动的模板语言。这意味着,开发者不...

    freemarker-2.3.30-API文档-中文版.zip

    赠送jar包:freemarker-2.3.30.jar; 赠送原API文档:freemarker-2.3.30-javadoc.jar; 赠送源代码:freemarker-2.3.30-sources.jar; 赠送Maven依赖信息文件:freemarker-2.3.30.pom; 包含翻译后的API文档:...

    Velocity 和 FreeMarker区别

    ### Velocity与FreeMarker的区别 在IT领域特别是Java开发中,模板引擎是不可或缺的一部分,它们用于将数据模型转换为HTML、PDF、Word文档等格式。在众多模板引擎中,Velocity和FreeMarker是两种非常受欢迎的选择。...

    模板:velocity和freemarker的比较

    Velocity和Freemarker模板技术比较 模板技术在现代软件开发中扮演着重要角色,而在目前最流行的两种模板技术中, Velocity 和 Freemarker 独占鳌头。在 WebWork2 中,我们可以随意选择使用 Freemarker 或 Velocity ...

    Freemarker简介及标签详解大全

    Freemarker 简介及标签详解大全 FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java 编写。FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序。虽然 FreeMarker ...

    freemarker生成xml示例

    这个示例是关于如何使用Freemarker来生成XML文件,对于初学者来说,理解这个过程有助于掌握Freemarker的基本用法和XML的生成技巧。 在Java中,Freemarker与数据模型结合,通过模板文件生成输出。对于XML生成,首先...

    freemarker官方中文帮助文档

    Freemarker是一款强大的模板引擎,常用于Web应用中的视图层渲染,比如Java Web开发。它的设计理念是将数据模型和展现逻辑分离,让开发者专注于HTML或者其他格式的模板设计,而不用关心具体的业务逻辑。这份...

    通过freemarker模板 生成PDF

    本主题将深入探讨如何利用Freemarker模板和wkhtmltox工具来实现这一功能。 **Freemarker模板** 是一个强大的Java模板引擎,用于动态生成文本输出,如HTML、XML或PDF。它支持变量替换、控制结构(如if/else)和复杂...

    springboot集成freemarker和shiro框架

    **SpringBoot集成Freemarker与Shiro框架详解** 在现代Web开发中,SpringBoot因其简洁、高效的特性,已经成为很多开发者的选择。而FreeMarker和Shiro则分别是常用的模板引擎和安全框架,它们能帮助我们构建出功能...

    可视化div布局 生成freemarker模板

    本话题主要探讨的是如何利用可视化div布局来生成FreeMarker模板,并结合Spring MVC 3框架进行应用。下面将详细阐述这些概念及其相关知识点。 1. **FreeMarker模板引擎**:FreeMarker是一个开源的Java模板引擎,它...

    FreeMarker通用的分页

    FreeMarker提供了一种灵活且强大的方式来处理动态内容,尤其适用于Web开发中的视图层。在FreeMarker中实现通用的分页功能是提高Web应用程序性能和用户体验的重要一环。 ### FreeMarker通用分页知识点解析 #### 1. ...

    freemarker Demo 适用于freemarker初学

    Freemarker是一个强大的模板引擎,常用于JavaEE应用中的视图层处理,尤其与Struts2等MVC框架配合使用,能实现灵活的动态页面渲染。这个"freemarker Demo"是一个适合初学者的示例项目,旨在帮助新接触Freemarker的...

    freemarker各种版本的jar包

    以下是对给定的Freemarker不同版本jar包的详细说明: 1. **Freemarker 2.3.19**: - 这个版本可能包含了一些基本的功能,如模板语言的语法,变量、表达式和控制结构。 - 它可能已经支持了数据模型绑定,允许...

Global site tag (gtag.js) - Google Analytics