解决方法整合-----The following has evaluated to null or missing

问题描述

servlet请求转发到freemarker中,访问时报错如下

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: #list employee_list as emp  [in template "employee.ftl" at line 68, column 17]
	----

	Java stack trace (for programmers):
	----
	freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]
		at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134)
		at freemarker.core.Expression.assertNonNull(Expression.java:233)
		at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:103)
		at freemarker.core.IteratorBlock.accept(IteratorBlock.java:93)
		at freemarker.core.Environment.visit(Environment.java:330)
		at freemarker.core.Environment.visit(Environment.java:336)

源代码:

<#list employee_list as emp>
                <#list employee_list as emp>
                    <tr>
                        <td>${emp_index+1}</td>
                        <td>${emp.empno?string("0")}</td>
                        <td>${emp.ename}</td>
                        <td>${emp.department}</td>
                        <td>${emp.job}</td>
                        <td style="color: red;font-weight: bold">¥${emp.salary?string("0.00")}</td>
                    </tr>
</#list>

主要意思是该list为null或者不存在,我通过查阅总结了以下几个方法可以逐个排错

方法整合

1添加判断是否为空

源代码:

<#list employee_list as emp>
                <#list employee_list as emp>
                    <tr>
                        <td>${emp_index+1}</td>
                        <td>${emp.empno?string("0")}</td>
                        <td>${emp.ename}</td>
                        <td>${emp.department}</td>
                        <td>${emp.job}</td>
                        <td style="color: red;font-weight: bold">¥${emp.salary?string("0.00")}</td>
                    </tr>
</#list>

解决办法是:因为ftl是不能传入空值的。如果有空值 就会报这个的错误 :只要做一下判断就行了

<#if employee_list??>

</#if>

修改之后代码

<#if employee_list??>
<#list employee_list as emp>
                <#list employee_list as emp>
                    <tr>
                        <td>${emp_index+1}</td>
                        <td>${emp.empno?string("0")}</td>
                        <td>${emp.ename}</td>
                        <td>${emp.department}</td>
                        <td>${emp.job}</td>
                        <td style="color: red;font-weight: bold">¥${emp.salary?string("0.00")}</td>
                    </tr>
</#list>
</#if>

2命名规则要使用驼峰命名

one example:


在这里插入图片描述
two example:


在这里插入图片描述

3未写get set方法

在这里插入图片描述
你要访问的是servlet而不是直接访问ftl文件,你servlet不传入数据如何让ftl显示数据,我真的是太蠢了,脑袋短路了 fk。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值