2012-07-22 60 views
8

我有以下代码,将Java方法的结果分配给一个freemarker变量。如何从可能返回null的方法分配变量?

<#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) 

我怎样才能避免这种异常,而不必在我的ftl中多次调用findSingleBenchmark方法?

回答

10

正常的方式来处理不安全的API,如这与!(爆炸)操作:

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

这是this section of the FreeMarker docsthe reasoning is given here详细。


如果你的代码段是实际的代码,你可能会缩短它(显著)到:

<td>${singleBenchmark.score!""}</td>