报错信息
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]
----
后端代码
前端代码
其功能要实现下拉框,添加了option却显示不出来(如下图),并且后端数据已经拿到(打印在控制台了),心想就是前端这里拿不到数据。
回头看报错信息,发现
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
注意 true 前面有一个空格,不然不会生效。
最终效果