九十八、freemarker框架报错 s.e.ErrorMvcAutoConfiguration$StaticView : Cannot render error page for request

简介: 九十八、freemarker框架报错 s.e.ErrorMvcAutoConfiguration$StaticView : Cannot render error page for request

报错信息


14.png


2022-04-22 12:59:38.904 ERROR 16164 --- [nio-8888-exec-1] freemarker.runtime                       : Error executing FreeMarker template


freemarker.core.InvalidReferenceException: The following has evaluated to null or missing:

==> pageContext  [in template "courseAdd.html" at line 84, column 29]


----

Tip: If the failing expression is known to 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: ${pageContext.request.contextPath}  [in template "courseAdd.html" at line 84, column 27]

----


后端代码


15.png


前端代码


16.png


其功能要实现下拉框,添加了option却显示不出来(如下图),并且后端数据已经拿到(打印在控制台了),心想就是前端这里拿不到数据。


17.png



回头看报错信息,发现


o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is freemarker.core.InvalidReferenceException: The following has evaluated to null or missing:


大致意思为:Servlet请求处理失败,可能为空值或缺失值


问题分析


那应该就是空值的问题,导致下拉框无法正常显示,teacherNames中存在空值


看日志 给出了处理办法即(上方标红加粗的提示) 添加

<div class="layui-input-block">
<!--                <#if myOptionalVar??>when-present<#else>when-missing</#if>-->
                <select id="baseCourseSelect" lay-search>
                    <option>--请选择——</option>
                        <#list teacherNames as tname>
                    <option value="${tname}">${tname}</option>
                        </#list>
                </select>
            </div>

后来通过查找找到了最终解决方法:


问题解决


在配置项(application.yml)中加入全局去空值的设置:


spring.freemarker.settings.classic_compatible= true

18.png


注意 true 前面有一个空格,不然不会生效。


最终效果


19.png

相关文章
|
4月前
|
前端开发 JavaScript API
一文吃透 Promise 与 async/await,异步编程也能如此简单!建议收藏!
在前端开发中,异步编程至关重要。本文详解了同步与异步的区别,通过生活化例子帮助理解。深入讲解了 Promise 的概念、状态及链式调用,并引入 async/await 这一语法糖,使异步代码更清晰易读。还介绍了多个异步任务的组合处理方式,如 Promise.all 与 Promise.race。掌握这些内容,将大幅提升你的异步编程能力,写出更优雅、易维护的代码,助力开发与面试!
259 0
一文吃透 Promise 与 async/await,异步编程也能如此简单!建议收藏!
|
存储 Web App开发 JSON
存储界的cookie、本地存储、会话存储
存储界的cookie、本地存储、会话存储
613 0
|
算法 安全 物联网
关于SM2、SM3、SM4、SM9这四种国密算法
本文介绍了四种国密算法——SM2、SM3、SM4和SM9。SM2是一种基于椭圆曲线的非对称加密算法,用于数据加密和数字签名;SM3是哈希算法,用于数字签名和消息完整性验证;SM4是对称加密算法,用于数据加密和解密;SM9是基于标识的非对称密码算法,适用于物联网环境中的数据安全和隐私保护。
8884 0
|
Java Maven 数据库
IDEA中如何导入jar包、IDEA中找不到对应类改怎样解决?(详细图解过程)
这篇文章提供了在IntelliJ IDEA中导入jar包的详细图解过程,包括当IDEA找不到对应类时的解决方法。内容涵盖了未加入jar包时程序报错的情况、加入jar包后成功启动的效果,以及如何解决驱动问题,确保使用正确版本的数据库驱动。
IDEA中如何导入jar包、IDEA中找不到对应类改怎样解决?(详细图解过程)
|
安全 API UED
WebSocket API 中的 close 事件是如何触发的?
【10月更文挑战第26天】close事件的触发涵盖了从正常的连接关闭到各种异常情况导致的连接中断等多种场景。通过监听close事件,开发人员可以在连接关闭时进行相应的处理,如清理资源、更新界面状态或尝试重新连接等,以确保应用程序的稳定性和良好的用户体验。
|
Java Windows
解决IDEA .properties文件中文乱码的问题
解决IDEA .properties文件中文乱码的问题
4234 0
解决IDEA .properties文件中文乱码的问题
|
Java 应用服务中间件 Maven
SpringBoot(三)之打包方式
在 mainClass 元素中指定主类的完全限定名,这是可执行 JAR 文件的入口点。
737 0
|
Java API Spring
【异常】Feign 调用api模块直接进入fallback的问题解决办法
【异常】Feign 调用api模块直接进入fallback的问题解决办法
725 0
|
Kubernetes Ubuntu Linux
通过 IntelliJ IDEA 对 containerd 进行源码级调试
本文介绍如何在 Ubuntu 22.04 系统上,通过 IntelliJ IDEA 对 containerd 进行源码级调试。我们将从 containerd 的安装、源码编译、验证调试信息的存在,到最终的调试过程中,每一步骤都进行详细讲解。
通过 IntelliJ IDEA 对 containerd 进行源码级调试