簡體   English   中英

在Freemarker模板中使用非標准類參數調用方法

[英]Calling a method with non-standard-class argument in Freemarker template

有很多問題詢問如何在根圖中設置的值上調用非bean方法。 當我傳入的參數不是標准類型(例如,它是我定義的枚舉(或與此相關的任何其他類))時,該怎么辦?

例如,我可以在Freemarker模板中簡單地執行以下操作:

<p>${product.name}</p>
<p>${product.normalizedDescription()}</p>

但是,當我調用的方法采用Java代碼中定義的Currency enum時,該怎么辦?

<p>${product.getPriceAsString(Currency.USD)}</p>

模板如何知道Currency enum以及在哪里可以找到其定義?

天真的解決方案是將Currency.USD (Java枚舉值本身)的值放入數據模型中,例如,名稱為"USD" ,然后可以編寫${product.getPriceAsString(USD)}

當然,像這樣將所有枚舉值放入數據模型可能是一個問題。 因此您可以將((BeansWrapper) cfg.getObjectWrapper()).getEnumModels().get(Currency.class.getName())放入名稱為"Currency"的數據模型中,然后放入${product.getPriceAsString(Currency.USD)}

你可以走得更遠了一步,把((BeansWrapper) cfg.getObjectWrapper()).getEnumModels()與名enums到數據模型,然后將模板可以做這樣的事情<#assign Currency = enums['com.example.Currency']> ,但是開始有點反MVC了。

另外請注意,而不是把這些到數據模型,你可以把這些值到Configuration為共享變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM