freemarker对null的处理 无非就这几种
1 提供默认值
<#if mouse?>
Mouse found
<#else>
也可以直接${mouse?if_exists}
<#if user.age??>
//TO DO
</#if>
2.忽略null值
假设前提:userName为null
${userName} error
${userName!} 空白
${userName!'tivon'} tivon
假设前提:user.name为null
${user.name},异常
${(user.name)!},显示空白
${user.name!'vakin'},若user.name不为空则显示本身的值,否则显示vakin
${user.name?default('vakin')},同上
${user.name???string(user.name,'vakin')},同上
3 list
<#list userList as user>
…
</#list>
List指令还隐含了两个循环变量:
user_index:当前迭代项在所有迭代项中的位置,是数字值。
user_has_next:用于判断当前迭代项是否是所有迭代项中的最后一项。
这2个值也可以控制 null 或者0的出现。
4<#escape x as x!""></#escape>可以对所有的变量进行空值处理,这里是全部替换为空字符串。当然也可以替换为其它字符串。
如果其中某些变量不需要这种替换,可以加入<#noescape></#noescape>标签。
5 这种为全局配置方法
配置classic_compatible=true可以满足一般需要。默认情况变量为null则替换为空字符串,如果需要自定义,写上${empty!"EmptyValue of fbysss"}的形式即可
a.通过Configuration设置。Configuration cfg = new Configuration(); cfg.setClassicCompatible(true);//设置属性
b.通过Eviroment设置。
Environment env = template.createProcessingEnvironment(root, out);
env.setClassicCompatible(true);
c.通过ftl设置:在ftl前加入<!--#setting classic_compatible=true-->;
d.通过Spring配置文件设置
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="freemarkerSettings">
<props>
<prop key="classic_compatible">true</prop>
</props>
</property>
</bean>
e.class目录下添加freemarker.properties文件:加入classic_compatible=true
(需要struts2或spring)
举一反三,其他属性也可以用类似方法进行设置。
补充知识点:
Freemarker中对List进行排序
通常我们的排序操作都是通过DAO层来实现的,如果我们想随时更改我们的排序,那么就必须修改我们的DAO层代码,确实不方便。但Freemarker为我们提供了这样的排序方法,解决了这个问题。
1. sort升序排序函数
sort对序列(sequence)进行排序,要求序列中的变量必须是:字符串(按首字母排序),数字,日期值。
<#list list?sort as l>…</#list>
2. sort_by函数
sort_by有一个参数,该参数用于指定想要排序的子变量,排序是按照变量对应的值进行排序,如:
<#list userList?sort_by(“age”) as user>…</#list>
age是User对象的属性,排序是按age的值进行的。
3. reverse降序排序函数
<#list list? reverse as l>…</#list>
reverse使用同sort相同。reverse还可以同sort_by一起使用
如:想让用户按年龄降序排序,那么可以这个样写
<#list userList?sort_by(“age”)?reverse as user>…</#list>
分享到:
相关推荐
9. **最佳实践**:合理组织模板文件结构、避免模板过于复杂、正确处理null值等都是使用Freemarker时需要注意的最佳实践。 通过这个压缩包提供的资源,开发者可以全面地学习和使用Freemarker,无论是初学者还是经验...
通过以上介绍,我们可以看到Freemarker提供了丰富的内置函数来帮助开发者处理各种数据类型。掌握这些内置函数的使用方法不仅能够提高开发效率,还能使得模板代码更加简洁、易读。希望本文能帮助大家更好地理解和运用...
3. 模板处理:Freemarker引擎接收模板和数据模型,然后生成最终的输出文本。 二、Freemarker语法 1. 变量输出:使用`${}`包裹变量名,例如`${name}`,会将对应数据模型中的`name`属性值输出。 2. 注释:使用`注释...
- 节点变量表示树形结构中的一个节点,主要用于XML处理。 #### B. 指令 **1. if, else, elseif** - `<#if condition>` 结构用于条件判断。 - 支持多个 `<#elseif>` 分支。 - 可选的 `<#else>` 分支。 - 示例:...
比如,它会比较FreeMarker和其他模板引擎(如JSP和Velocity)的不同,并解释为什么FreeMarker对null值和不存在的变量敏感,并提供处理方法。此外,FAQ部分还会解答关于数字格式、小数和分组分隔符号显示问题,以及...
对复杂的逻辑处理能力有限,不适合做大量业务处理。 5. **内置函数及用法**: FreeMarker提供了丰富的内置函数,如`date`, `number`, `string`等类型的操作,以及`join`, `length`, `sort`, `first`, `last`等集合...
4. **指令**:Freemarker支持一系列指令,如`<#assign>`分配变量,`<#include>`包含其他模板,`<#nested>`处理子模板等,它们扩展了模板的功能。 5. **模板继承与布局**:`<#macro>`定义宏,实现代码复用;`...
以下是对这些内置处理的详细说明: 1. **变量表达式** (`${...}`): FreeMarker的变量表达式用于输出Java对象的属性值。例如,`${user.name}`会尝试获取`user`对象的`name`属性并输出。如果属性不存在或者对象为...
- **空白处理**指的是对模板中的空格、制表符、换行符等空白字符的处理。 - **Freemarker**提供了多种空白处理模式,可以根据需要选择合适的处理方式。 ##### 4.5 替换(方括号)语法 - **方括号语法**是**...
null 处理 当对象为null时,可以使用`??`操作符避免空指针异常: ```freemarker ${user.name?default("匿名用户")} ``` ### 10. 提示方式 在模板中显示提示信息,可以通过占位符配合数据模型中的错误信息: ```...
在IT行业中,国际化(i18n)是一种技术,它允许软件产品和服务适应不同地区和语言的需求。Spring MVC作为Java Web开发中的一个强大框架,提供了...通过实践,你会对Spring MVC的i18n和Freemarker的结合有更深入的理解。
这一步骤非常重要,因为Word的XML格式能够被Freemarker识别并处理。 2. **标识符替换** 在XML文件中找到需要动态填充的部分,将其替换为Freemarker的标识符,例如`${year}</w:t>`。这样在生成文档时,Freemarker...
2. `Beans`和`Maps`:FreeMarker可以访问Java Bean的属性和Map中的键值对。 七、表达式 1. 操作符:支持算术、比较和逻辑操作符,如`+`、`-`、`*`、`/`、`==`、`!=`、`&&`、`||`等。 2. 链接表达式:如`${a?b.c.d...
以下是对Freemarker中Sequence、Hash以及字符串操作函数的详细说明。 一、Sequence的内置函数: 1. `sequence?first`:返回Sequence的第一个元素,如果Sequence为空,返回null。 2. `sequence?last`:返回Sequence...
FreeMarker支持对序列(如列表)进行循环处理,同时提供了`break`语句用于提前终止循环。 ```fml ... // 处理每个item 特定值"> <#break> // 当遇到特定值时,跳出循环 ``` ### 3. 包含文件 #### include ...
"freemarker04_空值的处理"这个主题,正是关注如何在Freemarker模板中优雅地处理这些空值,避免因空值导致的异常或不期望的输出。 1. **空值检查** 在Freemarker模板中,可以使用`?has_content`指令来判断变量是否...
在处理数据模型时,FreeMarker提供了自动类型转换和默认值设定。它能自动将Java对象转化为适合模板使用的格式,如将日期对象转化为字符串。同时,通过使用`?default`操作符,可以为可能为null的变量设定默认值,避免...
FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常,因为FreeMarker未赋值 的变量强制出错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量错误.这里所说的空值,...
- 自定义空值处理,通过`freemarker.template.Configuration`设置`NullModel`。 7. **示例**: - 基本输出:`${user.name}`,输出用户对象的name属性。 - 条件判断:`管理员:普通用户:</#if>`。 - 循环遍历:`$...