`

freemark对null值得处理技巧

阅读更多
部分转载自 http://blog.csdn.net/pk490525/article/details/7590362

//以下引用官方描述: 
//引用
The FreeMarker template language doesn't know the Java language null at all. It doesn't have null keyword, and it can't test if something is null or not.

1.判断是否存在,通过exists关键字或者"??"运算符。都将返回一个布尔值 
user.name?exists 
user.name??
[html] view plaincopy
<#if user.name?exists>  
 //TO DO  
</#if>  
  
<#if user.age??>  
 //TO DO  
</#if>  



2.忽略null值 
假设前提:user.name为null 
${user.name},异常 
${user.name!},显示空白 
${user.name!'vakin'},若user.name不为空则显示本身的值,否则显示vakin 
${user.name?default('vakin')},同上 
${user.name???string(user.name,'vakin')},同上
 
 
!语法 :
(1).原理:使用形式概览:unsafe_expr!default_expr或unsafe_expr!或  (unsafe_expr)!default_expr或(unsafe_expr)!
这个操作符允许你为可能不存在的变量指定一个默认值。
(2)例如:假设下面展示的代码中没有名为mouse的变量:
当这样定义时
 ${mouse!"no mouse"}
<#assign mouse="lala">
 ${mouse!"no mouse"}
将会输出
no mouse
lala
另外默认值可以是任何类型的表达式,也可以不必是字符串。你也可以这么写:
hits!0或colors!["red", "green", "blue"]。默认值表达式的复杂程度没有严格限制,你还可以这么来写:cargo.weight!(item.weight * itemCount + 10) 。
(3)警告:
如果在!后面有复合表达式,如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,则注意不能省略它。例如:
当这样定义时
(${mouse!})
<#assign mouse="lala">
(${mouse!})
将会输出
()
(lala)

另外注意点详见freemark文档


??语法: Missing value test operator ,测试是否为missing value 
       unsafe_expr?? :product.color??将只测试color是否为null
      (unsafe_expr)??:(product.color)??将测试product和color是否存在null 
分享到:
评论

相关推荐

    Freemark标签

    主要介绍了freemark标签的相关基础知识,基本上了解Freemark标签的应用

    freemark资料及eclipse的freemark插件

    它被广泛应用于Web开发中,特别是与Java后端框架如Spring、Struts等配合使用...对于Java Web开发者来说,熟悉FreeMarker并掌握其在Eclipse中的使用技巧是十分必要的,这将有助于构建更高效、更易于维护的Web应用程序。

    Freemark指南

    Freemark的核心概念主要包括三个:**序列(Sequence)**、**键值对集合(Hash)**以及**命名空间(Namespace)**。 ##### 序列(Sequence) - **定义**:序列是Freemark中用于存储一系列元素的数据结构,类似于...

    FreeMark Jar包 包括 中文 官方文档

    4. **配置**:FreeMark可以通过`freemarker.properties`文件进行配置,设置如模板加载策略、日期时间格式、错误处理等。 5. **模板缓存**:FreeMark可以缓存编译后的模板,提高性能。通过配置可以调整缓存大小和...

    freemark开发指南(入门)

    FREEMARK资料,开发入门指南 是开发人员了解FREEMARK的一本入门资料

    Freemark模板使用

    Freemark是一个强大的模板引擎,它允许开发者将逻辑与展示分离,使得HTML或其他类型的文档生成变得更加简洁和灵活。本教程适用于初学者,...随着对Freemark的深入理解和实践,你将能构建出更复杂、更高效的模板系统。

    freemark开发指南详解

    - **版本控制**:对模板文件进行版本控制,便于协同开发和回滚。 6. **实际应用场景** - **邮件生成**:Freemarker可用于动态生成个性化的邮件内容。 - **报表生成**:生成各种格式的报表,如PDF、Excel等。 - ...

    freemark 资料学习

    在你提供的资料中,"freemark中文资料"和"freemark教程"是学习的关键。它们可能包含了Freemarker的基本概念解释、实例演示、常见问题解答等。"freemark基础和高级教程"则更深入地讲解了Freemarker的各种特性,是进阶...

    freemark

    freemark资料

    Freemark基础入门+深入

    member_function(...)` 使用内置函数对变量进行转换。 - `stringA[M .. N]` 获取字符串的子串。 - `{key1: value1, key2: value2, ...}` 直接定义哈希表。 - `[item0, item1, item2, ...]` 创建序列。 - `hash...

    freemark 自定义标签 总结

    本篇文章将对Freemarker自定义标签进行深入的总结。 1. **自定义标签基础** 自定义标签在Freemarker中被称为`Custom Tags`,它们通过`&lt;@...&gt;`语法来调用。这些标签通常是由Java代码实现的,它们可以处理复杂的逻辑...

    Struts2+Freemark

    在"Struts2+Freemark 做到一个例子"中,你可能会看到以下的实践步骤: 1. 创建Action类并实现相关业务逻辑。 2. 编写FreeMarker模板文件(通常以`.ftl`为扩展名),定义视图布局和数据展示方式。 3. 在Struts2配置...

    实现FreeMark读取模板生成HTML

    在实际项目中,你可能还需要处理异常、优化性能,以及考虑模板的复用和缓存等问题。 FreeMarker提供的功能远不止这些,它支持条件判断、循环、宏等高级特性,可以根据具体需求灵活运用。在进行FreeMarker编程时,...

    freemark 生成静态页面

    它的核心思想是将数据模型与HTML模板分离,使得开发者可以专注于业务逻辑处理,而设计师则可以专注于页面的布局和样式设计。在这个项目中,我们讨论的是如何利用FreeMarker来生成静态页面。 首先,要理解FreeMarker...

    eclipse freemark插件

    “eclipse freemark插件”是为了在Eclipse中提供对FreeMarker模板语言的集成支持。安装此插件后,开发者可以在Eclipse中直接编写、调试和预览FreeMarker模板,极大地提高了工作效率。 该插件的安装方法相对简单:...

    freemark模板&模版技术

    这些对象包含了模板中需要显示或者处理的数据。 3. FreeMarker配置:配置对象是FreeMarker环境的容器,它包含了模板目录、缓存策略、模板语言设置等信息。 二、FreeMarker模板语法 1. 变量表达式: `${variable}`...

    freemark_java_test.rar_freeMark ja_freemark_java freemark

    在“freemark_java_test”目录下,你可以找到不同的示例模板文件(如`.ftl`扩展名),以及对应的Java代码,它们展示了如何配置FreeMarker,如何创建数据模型,以及如何处理模板输出。通过学习和运行这些示例,你将...

    freemark制定excel下载模板示例

    当下载的excel格式内容比较复杂时,用程序生成excel文件就显得力不从心。这时采用excel模板化,更加便捷高效。本资源基于springboot+freemark模板做的示例。只需要了解下freemark基本语法即可。

    freemark学习文档

    - **`sort`**:对集合进行排序。 - **`html`**:将内容转换为HTML安全的形式。 - **`time`**:处理时间相关的操作。 - **`index_of`**:查找一个元素在序列中的索引位置。 - **`values`**:获取Map类型的对象的所有...

Global site tag (gtag.js) - Google Analytics