我有以下代码,我将Java方法的结果分配给freemarker变量。
<#assign singleBenchmark = solverBenchmark.findSingleBenchmark(problemBenchmark)>
问题是该Java方法的返回值可能为null
。即使我检查该变量是否不是null
:
<#if !singleBenchmark??>
<td></td>
<#else>
<td>${singleBenchmark.score}</td>
</#if>
如果该Java方法返回<#assign ...>
,它仍会在null
行崩溃,但有以下异常:
freemarker.core.InvalidReferenceException: Error on line 109, column 45 in index.html.ftl
solverBenchmark.findSingleBenchmark(problemBenchmark) is undefined.
It cannot be assigned to singleBenchmark
at freemarker.core.Assignment.accept(Assignment.java:111)
如何在我的ftl中多次调用findSingleBenchmark
方法来避免此异常?
答案 0 :(得分:10)
像这样处理不安全API的正常方法是使用!
(bang)运算符:
<#assign singleBenchmark = solverBenchmark.findSingleBenchmark(problemBenchmark)!>
详情请见this section of the FreeMarker docs和the reasoning is given here。
如果您的代码段是实际代码,则可以(显着)将其缩短为:
<td>${singleBenchmark.score!""}</td>