2012-07-22 5 views
8

Ich habe den folgenden Code, wo ich das Ergebnis einer Java-Methode zu einer Freimarker-Variable zuweisen.Wie kann ich eine Variable aus einer Methode zuweisen, die möglicherweise null zurückgibt?

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

Das Problem ist, dass Rückgabewert dieser Java-Methode könnte null. Und auch wenn ich überprüfen, ob diese Variable nicht null ist:

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

Es ist immer noch auf der <#assign ...> Linie stürzt ab, wenn das Java-Methode null zurückgibt, mit dieser Ausnahme:

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) 

Wie kann ich Vermeiden Sie diese Ausnahme, ohne die Methode findSingleBenchmark mehrfach in meinem ftl aufrufen zu müssen?

Antwort

10

Der normale Weg unsichere APIs zu handhaben, wie dies mit dem ! (Bang) Operator:

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

Dies ist detailliert in this section of the FreeMarker docs und the reasoning is given here.


Wenn Ihr Schnipsel der eigentliche Code ist, können Sie es (deutlich) verkürzen:

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