springboot整合freemarker FTL stack trace ("~" means nesting-related): - Failed at:

问题:

后台model中 参数为空的情况下 ,freemarker模板报错,无法运行。

解决:
在application.properties添加

spring.freemarker.settings.classic_compatible=true

一句即可

详解:

原文详解

在freemarker中的空值的处理,默认情况以 x x x 的 方 式 取 值 会 报 错 , 我 们 一 般 都 采 用 {xxx}的方式取值会报错,我们一般都采用 xxx的方式取值会报错,我们一般都采用{xxx?if_exists} 的方式去处理,烦死人了。经过查资料,很多人都建议使用classic_compatible=true的方式来处理,目测单词的意思应该是:“兼容传统模式”的意思。但是经过使用发现这个属性设置为true时,也有很多其他问题,比如boolean值的处理,比如include指令必须使用绝对路径,总之也会带来很多烦人的事情。最后找到源码,在Freemarker源码的Configurable类的isClassicCompatible方法上找到了详细的注释,这里翻译下,不过本人英语比较差,可能会有错误,如果有人不确定可以去看源码。

原注释大意如下:该方法返回Freemarker模板解析引擎是否工作在“Classic Compatibile”模式下。如果这个模式被激活,则Freemarker模板解析引擎将以以下的方式工作:(类似于1.7.x这个版本的运行方式,这个也是1.7.x的版本被称为“经典的Freemarker”的由来)。(译者注:以下的1、2、3、4、5、6是译者自己加的,方便读者看)处理未定义的表达式,也就是说"expr"为null值。1、作为像表达式“<assign varname=expr>”、“${expr}”、“ otherexpr == expr“、“otherexpr != expr”条件表达式或者是“hash[expr]”表达式的参数,这个参数将被当成空字符来对待。(译者注:这里注意空字符和null是不一样的).2、作为“<list expr as item>”、“<foreach item in expr>”这样的表达式的参数,其循环体将不会被执行,和list的长度为0是一样的。3、作为“<if>”或者其他布尔表达式命令的参数,空值将被当成是false来处理。非布尔数据模型或者逻辑操作数也可以放在“<if>”表达式中,空模型(长度为零的字符串,空的数组或者hash集合)都被当成是false来对待,其他情况下都被当成是true来处理。4、当布尔值被当成字符串(比如用${...}输出,或者是和其他字符串连接),true值将被转换成“true”字符串处理,false值将被转换成空字符串。5、提供给<list>和<foreach>的标量数据模型参数将被当成只包含一个该模型的list来处理。(译者注:就是说,传给<list>和<foreach>的参数不是list或者数组类型的,而是单个元素,则会被当成只有一个元素的list或者数组)6、“<include>”标签的路径参数将被作为绝对路径处理。(译者注:这里很多网上的文档都没有提过,是本人经过观察发现的,然后从源码和其注释中找到的。在这种情况下,如果传入的ftl路径是相对路径,则会报找不到文件的异常)。在其他方面,甚至是在兼容模式下,这个Freemaker解析引擎是2.1引擎,你不会因此而丢掉其他新的功能。以上就是译文, 那么如果我们设置了全局的classic_compatible属性,而在某个页面上又不想遵守这个属性该怎么办呢?这样就可以在当前这个页面上采用以下的办法,让当前的页面不再支持传统模式:<#setting classic_compatible=false>

springboot整合freemarker FTL stack trace (“~“ means nesting-related): - Failed at: #相关推荐

  1. springboot整合freemarker出现空指针异常的解决办法

    问题 ERROR 792 --- [nio-8080-exec-2] freemarker.runtime : Error executing FreeMarker templatefreemarke ...

  2. springboot整合freemarker案例

    springboot整合freemarker案例 1.pom.xml 2.application.properties 3.实体类 4.controller 5.取普通变量的值 6.遍历集合 7.遍历 ...

  3. springboot整合freemarker(转)

    添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spri ...

  4. Springboot整合freemarker和相应的语法

    FreeMarker 是⼀款 模板引擎: 即⼀种基于模板和要改变的数据, 并⽤来⽣成输出⽂本(HTML⽹⻚,⼦邮件,配置⽂件,源代码等)的通⽤⼯具. 是⼀个Java类库. FreeMarker 被设计 ...

  5. SpringBoot整合freemarker找不到静态资源ftl文件解决办法

    1.检查是否引入freemarker依赖 <dependency><groupId>org.springframework.boot</groupId><ar ...

  6. SpringBoot整合Freemarker+Mybatis

    开发工具 , 开始 新建工程 .选择Spring Initializr 下一步 下一步,选择需要的组件 ..改一下工程名,Finish ..目录结构 首先,修改pom文件 然后,将applicatio ...

  7. Springboot整合FreeMarker

    目录 一.Freemark介绍 1.freemark介绍 2.freemark构建 1.首先要构建一个freemark工程 2.导入pom依赖,更改资源文件 3.新建index界面 4.测试: 二.F ...

  8. springboot 整合 freemarker前端模板引擎实现数据展示

    一.freemaker 1.简介 FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户 ...

  9. SpringBoot整合Freemarker导出word文档表格

    freemarker模板里面的template.process()方法里传入的第一个参数Object类型,如果是一个实体类对象在模板上怎么进行渲染,将实体类的值取出 freemarker会调用Obje ...

最新文章

  1. Http协议 详解(转载)
  2. 文件流下载到本地 - 待完成
  3. Qt Creator使用Clang代码模型解析C ++文件
  4. Photoshop脚本指南——Hello World
  5. mysql 单表卡死
  6. SAP社区改版之前的一些截图,怀旧啊
  7. phpcms发布新闻到数据库_如何利用PHPCMS调用新闻列表
  8. high definition audio控制器感叹号_三门峡回收科霸控制器
  9. keras版Mask-RCNN来训练自己的目标检测数据集
  10. asp数据分页显示技术(上下页版)
  11. PHP团队 编码规范 代码样式风格规范
  12. Vue项目开发相关问题总结
  13. 2021-09-23图嵌入方法
  14. sts背景色设置眼睛保护色
  15. Android获取外网IP地址
  16. 【渝粤题库】陕西师范大学292951 公司金融学Ⅱ 作业(专升本)
  17. 干货深挖!从写简历,到面试、谈薪酬的那些技巧和防坑指南
  18. 2020年12月电子学会青少年软件编程Scratch(二级)等级考试真题解析
  19. 任正非:外界过分吹捧华为,导致员工惰怠,华为必须保持清醒
  20. 为App界面添加蒙层效果

热门文章

  1. APP下载链接被微信封杀拦截屏蔽怎么解封在微信中直接点击下载链接直接下载app...
  2. 关于春节压岁钱的支配 调研报告
  3. 最健康的作息时间表与建议
  4. 【苹果推信】苹果推imessage群发开发真实机器调试的测试证书
  5. 传统呼叫中心系统与智能电销外呼系统的主要区别是什么?
  6. 深入剖析docker核心技术(namespace、cgroups、union fs、网络)
  7. 华硕无线网卡驱动下载
  8. 小白如何从零开始做电商运营
  9. 武林外史java游戏,武林外史手游官方版
  10. 苹果,游戏手柄应该被推出