我有以下代码,我将Java方法的结果分配给freemarker变量.
<#assign singleBenchmark = solverBenchmark.findSingleBenchmark(problemBenchmark)>
Run Code Online (Sandbox Code Playgroud)
问题是该Java方法的返回值可能null.即使我检查该变量是否不是null:
<#if !singleBenchmark??>
<td></td>
<#else>
<td>${singleBenchmark.score}</td>
</#if>
Run Code Online (Sandbox Code Playgroud)
<#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)
Run Code Online (Sandbox Code Playgroud)
如何在不必findSingleBenchmark在我的ftl中多次调用该方法的情况下避免此异常?
Dav*_*ton 10
像这样处理不安全API的正常方法是使用!(bang)运算符:
<#assign singleBenchmark = solverBenchmark.findSingleBenchmark(problemBenchmark)!>
Run Code Online (Sandbox Code Playgroud)
这在详细FreeMarker的文档的这一部分和推理在这里给出.
如果您的代码段是实际代码,则可以将其(显着)缩短为:
<td>${singleBenchmark.score!""}</td>
Run Code Online (Sandbox Code Playgroud)