2016-12-16 3 views
1

Поддерживает ли FreeMarker дополнительное значение в Java 8?FreeMarker Java 8 Поддержка дополнительных значений

например. У меня есть строковый идентификатор, а его метод геттер, как:

public Optional<String> getId() { 
    return Optional.ofNullable(Id); 
} 

Как я буду ссылаться на него в файле .ftl. Похоже, что {data.id} не может найти правильное Необязательное значение. Но дает мне опцию [1334586]

ответ

2

Ну, Freemarker не должен знать о Необязательном, или лучше сказать, что его динамически типизировано, поэтому он работает для любого объекта.

Поскольку вы вызываете $ {data.id}, это просто вызовы toString на Optional, что вполне ожидаемое поведение.

Если вы хотите обработать нулевые значения в шаблоне и что вы хотите использовать Optional, вы можете установить значение по умолчанию, если нуль, так что не будет необходимости Optional использования:

Synopsis: unsafe_expr!default_expr or unsafe_expr! or (unsafe_expr)!default_expr or (unsafe_expr)! 
    Example: ${data.id!"No id."} 

Или проверить, если это существует:

<#if data?? && data.id??> 
    Id found 
<#else> 
    Id not found 
</#if> 

Для получения дополнительной информации ознакомьтесь с Freemarker docs. В частности, части: обработка отсутствующих значений и оператор проверки отсутствующих значений.

Если вы просто хотите, чтобы получить значение из Optional в шаблоне:

${data.id.orElse('')} 

или

${data.id.get()!''} 
Смежные вопросы