有很多问题要求如何在根映射中的值集上调用非bean方法。当我传入的参数不是标准类型时(例如,当它定义了枚举(或任何其他类)时,我该怎么做?)
例如,我可以在我的Freemarker模板中轻松地执行以下操作:
<p>${product.name}</p>
<p>${product.normalizedDescription()}</p>
但是当我调用的方法在我的Java代码中定义了Currency enum
时呢?
<p>${product.getPriceAsString(Currency.USD)}</p>
模板如何知道Currency enum
以及在哪里找到它的定义?
答案 0 :(得分:1)
天真的解决方案是将Currency.USD
(Java枚举值本身)的值放入数据模型中,例如名称为"USD"
,然后您可以编写${product.getPriceAsString(USD)}
。
当然,将所有枚举值放入数据模型中可能会出现问题。因此,您可以将((BeansWrapper) cfg.getObjectWrapper()).getEnumModels().get(Currency.class.getName())
放入名为"Currency"
的数据模型中,然后${product.getPriceAsString(Currency.USD)}
应该有效。
您可以再向前迈一步,将名为((BeansWrapper) cfg.getObjectWrapper()).getEnumModels()
的{{1}}放入数据模型中,然后模板可以执行enums
之类的操作,但这有点开始反MVC。
另请注意,您可以将这些值作为共享变量放入<#assign Currency = enums['com.example.Currency']>
,而不是将它们放入数据模型中。