2013-10-12 3 views
2

У меня есть объект Customer, который имеет буквенную букву атрибутаActivated. Метод getter имеет следующий вид в соответствии со стандартными java-практиками.Получение атрибута буфера Freemarker

public Boolean isLetterActivated() { 
    return letterActivated; 
} 

Но похоже, Freemaker не пикап customer.letterActivated выражения и я предполагаю, что это может быть причиной я не имею getLetterActivated метод. (Обратите внимание, что другие выражения объекта клиента отлично работают, и все они получают *** методы).

Как я могу ссылаться на эту логическую переменную из FTL? Обратите внимание, что я не могу изменить имя метода getter (isMobileBillingAccount), поскольку он находится в существующем коде и упоминается во многих местах. И это правильный способ для булевого геттера, я думаю.

+0

Если вы используете IDE, например eclipse, вы можете реорганизовать метод 'getXXX', который изменит весь экземпляр вызова метода. boolean getter может быть назван с суффиксом как 'is', а также' get'. –

+0

:) Я знаю, что IDE будет использовать рефакторинг со ссылками, но он находится в клиентской банке, которую я не должен касаться. – popcoder

ответ

3

Либо использовать public boolean isLetterActivated() или public Boolean getLetterActivated(). Комбинация Boolean + is не определяет свойство JavaBean в соответствии со спецификацией JavaBeans. Вам не нужно менять имя, вы можете просто добавить правильный получатель. Или как последний шанс, вы можете использовать customer.isLetterActivated() в FTL.

1

boolean getter можно назвать также getXXX .. и, как вы сказали, есть другие ссылки, ссылающиеся на существующий метод isLetterActivated. я бы предложил сделать это, поскольку другие ссылки не подходят для вас.

public boolean getLetterActivated() { 
    return this.isLetterActivated(); 
} 

Таким образом, вы не испортите существующий код и новый код может использовать новый метод ... но я думаю, что это плохой дизайн. но с учетом обстоятельств я бы посоветовал вам пойти на это.

0
${customer.letterActivated?c} 

Использует isLetterActivated() и
Дисплей "истина", если значение true.

После кода также функционировать без каких-либо проблем для меня (испытанной в FreeMarker 2.3.20)

<#if (customer.letterActivated)!false> 
Great letter is activated! ${customer.letterActivated?c} man 
<#/if> 

()!false часть является только там, чтобы обрабатывать null значения.

Даже больше информации от Freemarker компилятора: выхода

Freemarker Компилятор

Невозможно преобразовать логическое значение в строку автоматически, так как установка «boolean_format» была «истинной, ложной», которая является наследие по умолчанию на компьютерном языке, и, следовательно, не принимается.

Совет: Если вы просто хотите получить «истинный»/«ложный» результат при создании вывода на компьютерном языке, используйте «? C», например $ {myBool? C}.

Совет: Вы можете написать строку myBool? ('Yes', 'no') и хотите указать булево форматирование на месте.

Совет. Если вам нужны те же самые два значения в большинстве мест, программисты должны установить для параметра «boolean_format» значение «да, нет».

+0

В вашем классе клиента у вас есть только isLetterActivated как getter для атрибута letterActivated boolean? или у вас тоже есть getLetterActivated? Я попробовал customer.letterActivated? C, но не работал ... – popcoder

+0

Кажется, клиент.letterActivated? C работает только для Freemarker 2.3.20 и более поздних версий. Старые версии могут использовать customer.letterActivated? String ('yes', 'no'). И нет, у меня нет метода getLetterActivated(). LetterActivated поле также не требуется или может быть закрытым. но не проверены в более старых версиях. –

Смежные вопросы