freemarker中对null值的处理_freemarker null-程序员宅基地

技术标签: freemarker  JAVA高级  

官方文档

​​​​​​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'}

结果: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('不为空','为空')},为空

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39997939/article/details/122648657

智能推荐

文本相似度分析(基于jieba和gensim)-程序员宅基地

文章浏览阅读829次。基础概念本文在进行文本相似度分析过程分为以下几个部分进行,文本分词语料库制作算法训练结果预测分析过程主要用两个包来实现jieba,gensimjieba:主要实现分词过程gensim:进行语料库制作和算法训练结巴(jieba)分词在自然语言处理领域中,分词和提取关键词都是对文本处理时通常要进行的步骤。用Python语言对英文文本进行预处理时可选择NLTK库,中文文本预处..._python gensim模块和jieba模块的区别

ScrollPic.js—简单易用的图片左右滚动插件-程序员宅基地

文章浏览阅读5.8k次。ScrollPic.js对于一些新手来说是一个很好理解运用的图片左右滚动插件,兼容性较好,可以放心大胆的使用。_scrollpic.js

Java开发实例大全提高篇——操作PDF篇-程序员宅基地

文章浏览阅读275次。第4篇 操作PDF篇 第13章 操作PDF文档 13.1 文档和文档属性 实例380 创建PDF文档 public static void main(String[] args) { try { Document document = n..._java开发实例大全pdf百度云

java socket缓冲区大小_socket tcp缓冲区大小的默认值、最大值-程序员宅基地

文章浏览阅读1.6k次。Author:阿冬哥Created:2013-4-17Blog:http://blog.csdn.net/c359719435/Copyright 2013阿冬哥http://blog.csdn.net/c359719435/使用以及转载请注明出处1 设置socket tcp缓冲区大小的疑惑疑惑1:通过setsockopt设置SO_SNDBUF、SO_RCVBUF这连个默认缓冲区的值,再用ge..._java api 调用setsockopt(2)系统调用so_rcvbuf选项来控制它的大小

迷信一把:三才数理吉凶_113易经数字代表什么-程序员宅基地

文章浏览阅读1.2w次。所谓三才即天才、人才、地才,它们分别是天格、人格、地格数字的个位 数。4U,byhN0五行之间的关系是:木、火、土、金、水相临相生,相隔相克。这样,根据数理与五行之间的内在联系,推算出来的配置关系即为三才配置。从中观察三才配置的凶吉,可以判断把握您的综合运势,预测您的事业成功 率以及身体状况. 111 成功顺利伸展,希望圆满达成,基础安定,_113易经数字代表什么

群晖 半洗白_黑群晖利用DDSM半洗白教程-程序员宅基地

文章浏览阅读1.2w次,点赞5次,收藏9次。半洗白原理半洗白原理:DSM6 以上的系统。群晖Docker中会增加一个叫做DSM的功能。简单来说,就是利用Docker在你的群晖系统中,虚拟一个群晖系统。然而,令我们庆幸的是。这个虚拟出来的小群晖。在Docker中是自带生成序列号(SN)的。只不过这个序列号我们只能用来半洗白而不能全洗白。所以,我们只需要将这个小群晖的序列号和MAC 提取出来。替换到你物理机安装的群晖引导当中,就可以实现半洗白咯..._2020年黑群晖还能洗白吗

随便推点

phpcms调用指定父栏目下的子栏目列表,非文章列表_phpcms 调用当前栏目子类-程序员宅基地

文章浏览阅读442次。{pc:get sql="select * from phpcms_category where parentid =17 order by listorder ASC" return="data"} {loop $data $r} <li><a class="" href="{str_replace('www.shandlawyer.cn','m.sh..._phpcms 调用当前栏目子类

输入pip命令报错:from pip import main ImportError: cannot import name 'main'_非root用户pip命令使用时出现import错误-程序员宅基地

文章浏览阅读849次。pip更新后会遇到下面的问题: pip -VTraceback (most recent call last): File "/Users/alisa.li/.pyenv/versions/3.6.5/bin/pip", line 7, in &lt;module&gt; from pip import _main_ImportError: cannot import ..._非root用户pip命令使用时出现import错误

CMD命令:不是内部或者外部命令也不是可运行的程序或批处理文件-程序员宅基地

文章浏览阅读10w+次,点赞237次,收藏245次。前言: 相信有很多小伙伴都比较喜欢使用Command命令来快速的打开或运行程序,但是有些时候命令提示符会和我们开个小玩笑。今天我就教大家如何管教这个不听话的cmd! 场景: 看有些大神在命令提示符里输入两句命令就能执行一大串东西,本着学习的态度,先试试再说!没成想出现了:“不是内部或外部命令,也不是可运行的程序或批处理文件。” 通过各种查各种找,终于......_不是内部或者外部命令也不是可运行的程序或批处理文件

【Flutter web】内网网站如何发布?解决外网下canvaskit.js和字体无法加载问题_flutter web canvaskit.js-程序员宅基地

文章浏览阅读5.4k次,点赞2次,收藏6次。背景由于部署的网站只能在内网下使用,部署服务器又不能访问外网,导致Flutter web部署遇到很多问题,比如:白屏。部署的网站为何首次加载缓慢,会白屏?通过浏览器开发工具看图:可以看到css和ttf文件加载失败了(也要注意cancaskit.js和canvaskit.wasm这两个文件,内网环境下肯定也是不能fetch的),那么白屏或者白屏后字体不见了问题就是这个获取失败了,查看这两个文件加载地址:https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu_flutter web canvaskit.js

ant项目构建(打jar包小案例)_ant构建,包小-程序员宅基地

文章浏览阅读8.3k次。ant介绍不说了,在此直接使用ant为项目打一个jar包,在开始之前,先说下ant环境的搭建ant环境准备:首先安装好JDK,配置好JAVA_HOME与PATH;其次下载ant包,直接解压,配置ANT_HOME与PATH环境变量;最后测试ant环境是否搭建成功:cmd下输入ant -version,出现ant版本信息说明ant环境搭建成功利用ant打jar包先编写b_ant构建,包小

java获取tomcat端口_获取当前Tomcat实例的端口-程序员宅基地

文章浏览阅读1.3k次。有时需要在当前代码中获取当前Server实例的端口号, 通过HttpServletRequest请求可以, 但有时也需要在没有请求的情况下获取到端口号.用以下方法是可以获取到的:public int getHttpPort() {try {MBeanServer server;if (MBeanServerFactory.findMBeanServer(null).size() > 0) {..._java获取tomcat端口号

推荐文章

热门文章

相关标签