2012-07-22 49 views
8

Tôi có mã sau đây, trong đó tôi gán kết quả của một phương thức Java cho biến freemarker.Làm cách nào để gán một biến từ một phương thức có thể trả về null?

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

Vấn đề là giá trị trả về của phương thức Java đó có thể null. Và mặc dù tôi kiểm tra xem biến đó không phải là null:

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

Nó vẫn còn treo trên dòng <#assign ...> nếu đó phương thức Java trả null, với ngoại lệ này:

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) 

Làm thế nào tôi có thể tránh ngoại lệ này mà không cần phải gọi phương thức findSingleBenchmark nhiều lần trong ftl của tôi?

Trả lời

10

Cách thông thường để xử lý các API không an toàn như thế này là với ! (nổ) điều hành:

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

Đây là chi tiết trong this section of the FreeMarker docsthe reasoning is given here.


Nếu đoạn mã của bạn là mã thực tế, bạn có thể rút ngắn nó (đáng kể) tới:

<td>${singleBenchmark.score!""}</td> 
Các vấn đề liên quan