8

我有以下代码,我将 Java 方法的结果分配给 freemarker 变量。

<#assign singleBenchmark = solverBenchmark.findSingleBenchmark(problemBenchmark)>

问题是该 Java 方法的返回值可能null。即使我检查该变量是否不是null

<#if !singleBenchmark??>
    <td></td>
<#else>
    <td>${singleBenchmark.score}</td>
</#if>

<#assign ...>如果该 Java 方法返回,它仍然在线崩溃,但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)

如何避免此异常,而不必findSingleBenchmark在我的 ftl 中多次调用该方法?

4

1 回答 1

10

处理此类不安全 API 的常规方法是使用!(bang) 运算符:

<#assign singleBenchmark = solverBenchmark.findSingleBenchmark(problemBenchmark)!>

这在 FreeMarker 文档的这一部分中进行了详细说明,并且在此处给出了推理


如果您的代码段是实际代码,您可以将其(显着)缩短为:

<td>${singleBenchmark.score!""}</td>
于 2012-07-22T19:03:59.877 回答