1. freemarker不支持null。

如果值为null会报错。

2.当值为null的处理

1)过滤不显示

Hello ${name!} 在属性后面加感叹号即可过滤null和空字符串

if和”??“

<#if age??>

无年龄值

<#/if>

$和!

${age!'0'}

如果age为null,默认给'0'

2)设置默认值

如${student1.user!"null"}

3)判断是否存在值

$stduent.user?if_exists}
这样显示就没有问题了

if判断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>

<#if SoStoreAddressAndAppMaster.paymentStatus?if_exists=="00">
 </#if>

4)?? 用于判断是否为空

<#if user.role??>
 当前用户没有权限角色
 <#else>
 当前用户有权限角色
</#if>

${user.role???string}这里将结果以字符串的形式输出:true 或者false

${user.role???string("YES","NO")} 这判定用户权限角色为空

freemarker中对null值问题的处理的更多相关文章

  1. SQL中的NULL值

    除is [not] null之外,空值不满足任何查找条件.–如果null参与算术运算,则该算术表达式的值为null.–如果null参与比较运算,则结果可视为false.在SQL-92中可看成unkno ...

  2. sql 中的null值

    1.包含null的表达式都为空 select salary*12+nvl(bonus,0) nvl是虑空函数 2. null值永远!=null select  * from emp  where bo ...

  3. java中,null值可以被强制转换为任何类型

    java中,null值可以被强制转换为任何类型

  4. 参数中传Null值

    参数中传Null值虽然不是一种优雅的方式,但有时候可以省时间.不过不推荐.

  5. SqlServer中的Null值空值问题

    sql使用的是三值谓词逻辑,所以逻辑表达式返回的结果可以为True.False或者未知,在三值逻辑中返回True与不返回False并不完全一样, SQL对查询过滤条件的处理:接受TURE  拒绝FAL ...

  6. MySQL中order by中关于NULL值的排序问题

    MySQL中order by 排序遇到NULL值的问题 MySQL数据库,在order by排序的时候,如果存在NULL值,那么NULL是最小的,ASC正序排序的话,NULL值是在最前面的. 如果我们 ...

  7. linq 在查询表达式中处理 null 值

    此示例显示如何在源集合中处理可能的 null 值. IEnumerable<T> 等对象集合可包含值为 null 的元素. 如果源集合为 null 或包含值为 null 的元素,并且查询不 ...

  8. Java中的null值总结

    自我总结,有什么不对或不到位的地方,请指出,感激不尽! 目的:熟练掌握java中null值出现的情况,避免NullPointerException 代码环境准备:需要引入junit;将代码packag ...

  9. Freemarker中的null判断,小坑一枚

    上次写到,在Freemarker中日期转换,可以提取成工具方法.主要是Freemarker对null的处理方式,非常坑爹.只要一个对象或对象的属性为null,就报错,虽然不影响界面显示,但控制台和日志 ...

随机推荐

  1. 5Lambda表达式

    C++11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作.首先看一下Lambda表达式的基本构成: [函数对象参数](操作符重载函数参数)mutable或exception -&g ...

  2. linux下安装vsftp(二)

    安装vsftpd 1.以管理员(root)身份执行以下命令 yum install vsftpd 2.设置开机启动vsftpd ftp服务 chkconfig vsftpd on 3.启动vsftpd ...

  3. jquery事件 on(),live(),delegate(),blind()

    jQuery推出on()的目的有2个,一是为了统一接口,二是为了提高性能, 所以从现在开始用on()替换bind(), live(), delegate吧. 尤其是不要再用live()了,因为它已经处 ...

  4. uva11865 朱刘算法+二分

    这题说的需要最多花费cost元来搭建一个比赛网络,网络中有n台机器,编号为0 - n-1其中机器0 为服务器,给了n条线有向的和他们的花费以及带宽 计算,使得n台连接在一起,最大化网络中的最小带宽, ...

  5. Android (Android Studio)无法启动adb 解决方案

    打开cmd 输入:     netstat -aon|findstr "5037"      回车  taskkill /pid xxxx /f     ps:xxxx为占用端口 ...

  6. Jmeter响应内容显示乱码问题的解决办法

    Jmeter在访问接口的时候,响应内容如果有中文可能会显示乱码,原因应该是响应页面没有做编码处理,jmeter默认按照ISO-8859-1编码格式进行解析. 下面把解决步骤列一下: 现象:jmeter ...

  7. HttpClient配置SSL绕过https证书

    https://blog.csdn.net/irokay/article/details/78801307 HttpClient简介 HTTP 协议可能是现在 Internet 上使用得最多.最重要的 ...

  8. bzoj1648 / P2853 [USACO06DEC]牛的野餐Cow Picnic

    P2853 [USACO06DEC]牛的野餐Cow Picnic 你愿意的话,可以写dj. 然鹅,对一个缺时间的退役选手来说,暴力模拟是一个不错的选择. 让每个奶牛都把图走一遍,显然那些被每个奶牛都走 ...

  9. HTML 和 JavaScript 编写简单的 404 界面

    编写简单的 404 界面,也可以用来做 500 报错界面,还会飘东西,特别好,蛮漂亮的! <!DOCTYPE html> <html> <head> <met ...

  10. 03: shell简单监控脚本

    1.1 监控apache web server #! /bin/bash # apache netstat -anpt | grep 80 &> /dev/null if [ $? -e ...