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)

findSingleBenchmarkftlでメソッドを複数回呼び出すことなく、この例外を回避するにはどうすればよいですか?

4

1 に答える 1

10

このような安全でないAPIを処理する通常の方法は、!(bang)演算子を使用することです。

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

これについては、FreeMarkerドキュメントのこのセクションで詳しく説明されており、その理由はここに記載されています


スニペットが実際のコードである場合は、(大幅に)次のように短縮できます。

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