freemarker中对null值的处理

简介: 官方文档​​​​​​FreeMarker 中文官方参考手册 (foofun.cn)

1. freemarker不支持null。

如果值为null会报错,如下:

FreeMarker template error (DEBUG mode; use RETHROW in production!):
The following has evaluated to null or missing:
==> setmeal.sex [in template "mobile_setmeal.ftl" at line 41, column 42]
----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: #if setmeal.sex == "0" [in template "mobile_setmeal.ftl" at line 41, column 37]
----
Java stack trace (for programmers):
----
freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]
at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:131)
at freemarker.core.EvalUtil.compare(EvalUtil.java:195)
at freemarker.core.EvalUtil.compare(EvalUtil.java:112)
at freemarker.core.ComparisonExpression.evalToBoolean(ComparisonExpression.java:64)
at freemarker.core.IfBlock.accept(IfBlock.java:46)
at freemarker.core.Environment.visit(Environment.java:324)
at freemarker.core.MixedContent.accept(MixedContent.java:54)
at freemarker.core.Environment.visitByHiddingParent(Environment.java:345)


2. 当值为null的处理

2.1 过滤不显示

在属性后面加感叹号即可过滤null和空字符串,如果name为null则为空,不会报错

示例:

Hello${name!}World

结果:HelloWorld

if和??

示例:

<#if age??>
     年龄不为空:${age}
     <#else>
     年龄为空
</#if>

结果:年龄为空

$和!

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

示例:

${age!'0'}


2.2 设置默认值

示例:

<#assign info={"mobile":"13812345678",'address':'北京市昌平区'} >
${info.mobile999!"null"}

结果:null


2.3 判断是否存在值

示例:

<#assign info={"mobile":"13812345678",'address':'北京市昌平区'} >
${info.mobile999?if_exists}

结果:空,这样显示就没有问题了


2.4 忽略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('不为空','为空')},为空


相关文章
freemarker中遇到null报错的处理方法
freemarker中遇到null报错的处理方法
250 0
freemarker中遇到null报错的处理方法
|
Java
FreeMarker 对null值的处理技巧
以下引用官方描述:  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关键字或者"??"运算符。
1103 0
|
4月前
|
机器学习/深度学习 SQL 关系型数据库
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
【MySQL进阶之路丨第十一篇】一文带你精通MySQL NULL值处理、正则表达式
74 0
|
4月前
|
SQL 关系型数据库 MySQL
总结 vue3 的一些知识点:MySQL NULL 值处理
总结 vue3 的一些知识点:MySQL NULL 值处理
|
4月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之从MySQL同步数据到Doris时,历史数据时间字段显示为null,而增量数据部分的时间类型字段正常显示的原因是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
SQL 关系型数据库 MySQL
在 MySQL 中使用 IS NULL
【8月更文挑战第12天】
590 0
在 MySQL 中使用 IS NULL
|
4月前
|
SQL 关系型数据库 MySQL
python在mysql中插入或者更新null空值
这段代码是Python操作MySQL数据库的示例。它执行SQL查询从表`a_kuakao_school`中选取`id`,`university_id`和`grade`,当`university_id`大于0时按升序排列。然后遍历结果,根据`row[4]`的值决定`grade`是否为`NULL`。若不为空,`grade`被格式化为字符串;否则,设为`NULL`。接着构造UPDATE语句更新`university`表中对应`id`的`grade`值,并提交事务。重要的是,字符串`NULL`不应加引号,否则更新会失败。
129 2
|
1月前
|
SQL 关系型数据库 MySQL
mysql不等于<>取特定值反向条件的时候字段有null值或空值读取不到数据
对于数据库开发的专业人士来说,理解NULL的特性并知道如何正确地在查询中处理它们是非常重要的。以上所介绍的技巧和实例可以帮助你更精准地执行数据库查询,并确保数据的完整性和准确性。在编写代码和设计数据库结构时,牢记这些细节将有助于你避免许多常见的错误,提高数据库应用的质量与性能。
42 0
|
2月前
|
SQL 存储 索引
MySQL设计规约问题之为什么应该把字段定义为NOT NULL并且提供默认值
MySQL设计规约问题之为什么应该把字段定义为NOT NULL并且提供默认值
|
3月前
|
SQL 关系型数据库 MySQL
MySQL外键约束行为解析:CASCADE, NO ACTION, RESTRICT, SET NULL
MySQL外键约束行为解析:CASCADE, NO ACTION, RESTRICT, SET NULL