`
tivon
  • 浏览: 68068 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

freemarker 对null 的处理

阅读更多
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>


分享到:
评论
1 楼 C203032S 2017-03-28  
请问 如果我的user是null 我要在页面显示${user.name}怎么实现呀

相关推荐

    freemarker-2.3.22

    9. **最佳实践**:合理组织模板文件结构、避免模板过于复杂、正确处理null值等都是使用Freemarker时需要注意的最佳实践。 通过这个压缩包提供的资源,开发者可以全面地学习和使用Freemarker,无论是初学者还是经验...

    freemarker_常用内置函数

    通过以上介绍,我们可以看到Freemarker提供了丰富的内置函数来帮助开发者处理各种数据类型。掌握这些内置函数的使用方法不仅能够提高开发效率,还能使得模板代码更加简洁、易读。希望本文能帮助大家更好地理解和运用...

    freemarker中文手册

    3. 模板处理:Freemarker引擎接收模板和数据模型,然后生成最终的输出文本。 二、Freemarker语法 1. 变量输出:使用`${}`包裹变量名,例如`${name}`,会将对应数据模型中的`name`属性值输出。 2. 注释:使用`注释...

    freemarker语法完整版

    - 节点变量表示树形结构中的一个节点,主要用于XML处理。 #### B. 指令 **1. if, else, elseif** - `&lt;#if condition&gt;` 结构用于条件判断。 - 支持多个 `&lt;#elseif&gt;` 分支。 - 可选的 `&lt;#else&gt;` 分支。 - 示例:...

    FreeMarker手册

    比如,它会比较FreeMarker和其他模板引擎(如JSP和Velocity)的不同,并解释为什么FreeMarker对null值和不存在的变量敏感,并提供处理方法。此外,FAQ部分还会解答关于数字格式、小数和分组分隔符号显示问题,以及...

    freemarker资料集

    对复杂的逻辑处理能力有限,不适合做大量业务处理。 5. **内置函数及用法**: FreeMarker提供了丰富的内置函数,如`date`, `number`, `string`等类型的操作,以及`join`, `length`, `sort`, `first`, `last`等集合...

    freemarker官方中文帮助文档

    4. **指令**:Freemarker支持一系列指令,如`&lt;#assign&gt;`分配变量,`&lt;#include&gt;`包含其他模板,`&lt;#nested&gt;`处理子模板等,它们扩展了模板的功能。 5. **模板继承与布局**:`&lt;#macro&gt;`定义宏,实现代码复用;`...

    freemarker 内置的几个处理

    以下是对这些内置处理的详细说明: 1. **变量表达式** (`${...}`): FreeMarker的变量表达式用于输出Java对象的属性值。例如,`${user.name}`会尝试获取`user`对象的`name`属性并输出。如果属性不存在或者对象为...

    freemarker中文文档

    - **空白处理**指的是对模板中的空格、制表符、换行符等空白字符的处理。 - **Freemarker**提供了多种空白处理模式,可以根据需要选择合适的处理方式。 ##### 4.5 替换(方括号)语法 - **方括号语法**是**...

    FreeMarker笔记1

    null 处理 当对象为null时,可以使用`??`操作符避免空指针异常: ```freemarker ${user.name?default("匿名用户")} ``` ### 10. 提示方式 在模板中显示提示信息,可以通过占位符配合数据模型中的错误信息: ```...

    springmvc 实现i18n国际化+freemarker小实例demo

    在IT行业中,国际化(i18n)是一种技术,它允许软件产品和服务适应不同地区和语言的需求。Spring MVC作为Java Web开发中的一个强大框架,提供了...通过实践,你会对Spring MVC的i18n和Freemarker的结合有更深入的理解。

    用Freemarker生成word文档

    这一步骤非常重要,因为Word的XML格式能够被Freemarker识别并处理。 2. **标识符替换** 在XML文件中找到需要动态填充的部分,将其替换为Freemarker的标识符,例如`${year}&lt;/w:t&gt;`。这样在生成文档时,Freemarker...

    freeMarker语法

    2. `Beans`和`Maps`:FreeMarker可以访问Java Bean的属性和Map中的键值对。 七、表达式 1. 操作符:支持算术、比较和逻辑操作符,如`+`、`-`、`*`、`/`、`==`、`!=`、`&&`、`||`等。 2. 链接表达式:如`${a?b.c.d...

    Freemarker学习总结.pdf

    以下是对Freemarker中Sequence、Hash以及字符串操作函数的详细说明。 一、Sequence的内置函数: 1. `sequence?first`:返回Sequence的第一个元素,如果Sequence为空,返回null。 2. `sequence?last`:返回Sequence...

    FreeMarker基础语法

    FreeMarker支持对序列(如列表)进行循环处理,同时提供了`break`语句用于提前终止循环。 ```fml ... // 处理每个item 特定值"&gt; &lt;#break&gt; // 当遇到特定值时,跳出循环 ``` ### 3. 包含文件 #### include ...

    freemarker04

    "freemarker04_空值的处理"这个主题,正是关注如何在Freemarker模板中优雅地处理这些空值,避免因空值导致的异常或不期望的输出。 1. **空值检查** 在Freemarker模板中,可以使用`?has_content`指令来判断变量是否...

    FreeMarker_Manual_zh_CN.rar_freemarker

    在处理数据模型时,FreeMarker提供了自动类型转换和默认值设定。它能自动将Java对象转化为适合模板使用的格式,如将日期对象转化为字符串。同时,通过使用`?default`操作符,可以为可能为null的变量设定默认值,避免...

    freemarker总结

    FreeMarker对空值的处理非常严格,FreeMarker的变量必须有值,没有被赋值的变量就会抛出异常,因为FreeMarker未赋值 的变量强制出错可以杜绝很多潜在的错误,如缺失潜在的变量命名,或者其他变量错误.这里所说的空值,...

    freemarker

    - 自定义空值处理,通过`freemarker.template.Configuration`设置`NullModel`。 7. **示例**: - 基本输出:`${user.name}`,输出用户对象的name属性。 - 条件判断:`管理员:普通用户:&lt;/#if&gt;`。 - 循环遍历:`$...

Global site tag (gtag.js) - Google Analytics