gpt4 book ai didi

java - 在 Freemarker 模板中调用带有非标准类参数的方法

转载 作者:行者123 更新时间:2023-12-01 12:31:03 25 4
gpt4 key购买 nike

有很多问题询问如何对根映射中设置的值调用非 bean 方法。当我传入的参数不是标准类型时(例如,当它是我定义的枚举(或与此相关的任何其他类)时),我该如何执行此操作?

例如,我可以在 Freemarker 模板中轻松执行以下操作:

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

但是当我调用的方法采用我在 Java 代码中定义的 Currency enum 时该怎么办?

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

模板如何知道货币枚举以及在哪里可以找到其定义?

最佳答案

简单的解决方案是将 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 中,而不是将这些值放入数据模型中。作为共享变量。

关于java - 在 Freemarker 模板中调用带有非标准类参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25915947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com