2012-07-22 23 views
8

Tengo el siguiente código donde asigno el resultado de un método Java a una variable freemarker.¿Cómo puedo asignar una variable de un método que puede devolver nulo?

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

El problema es que el valor de retorno del método Java que podría null. Y a pesar de que puedo comprobar si esa variable no es null:

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

Todavía se estrella en la línea <#assign ...> si ese método Java vuelve null, con esta excepción:

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) 

¿Cómo puedo evitar esta excepción sin tener que llamar al método findSingleBenchmark varias veces en mi ftl?

Respuesta

10

La manera normal de manejar APIs inseguras como esto es con el ! (explosión) operador:

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

Esto se detalla en this section of the FreeMarker docs y the reasoning is given here.


Si el fragmento es el código real, es posible acortarlo (significativamente) a:

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