2013-10-12 75 views
2

我有一個Customer對象,它具有布爾屬性letterActivated。根據標準的java實踐,getter方法如下所示。Freemarker布爾屬性檢索

public Boolean isLetterActivated() { 
    return letterActivated; 
} 

但是好像freemaker的不皮卡customer.letterActivated表達,我想這可能是原因,我沒有getLetterActivated方法。 (請注意,客戶對象的其他表達式可以正常工作,所有這些都可以獲得***方法)。

我應該怎樣從FTL引用這個布爾變量?請注意,我無法更改getter方法名稱(isMobileBillingAccount),因爲它在現有代碼中並在許多地方被引用。這也是我猜猜布爾值getter的正確方法。

+0

如果您使用的是IDE等eclipse,您可以將方法重構爲'getXXX',它將更改方法調用的所有實例。一個布爾型的getter可以用'後綴'和'get'來命名。 –

+0

:)我知道IDE將重構引用,但它是在我不應該觸摸的客戶端jar中。 – popcoder

回答

3

可以使用public boolean isLetterActivated()public Boolean getLetterActivated()Boolean + is組合未根據JavaBeans規範定義JavaBean屬性。您不必更改名稱,只需添加正確的getter即可。或者作爲最後的機會,您可以在FTL中使用customer.isLetterActivated()

1

一個布爾型吸氣器也可以名稱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」設置設置爲「yes,no」。

+0

在你的客戶類中,你是否只有isLetterActivated作爲letterActivated布爾屬性的獲取者?否則,你是否也有g​​etLetterActivated?我試過了customer.letterActivated?c但是沒有工作... – popcoder

+0

看來customer.letterActivated?c只適用於Freemarker 2.3.20及更高版本。舊版本可以使用customer.letterActivated?string('yes','no')。沒有我沒有getLetterActivated()方法。 letterActivated字段也不是必需的,也可能是私人的。但未在舊版本中測試。 –