gpt4 book ai didi

velocity - 在速度模板中创建对象

转载 作者:行者123 更新时间:2023-12-02 22:06:19 27 4
gpt4 key购买 nike

我已经看过这个问题了,但它谈论的是 liferay-velocity 并且似乎可以访问我无权访问的这个“$portal”对象。

Create object in velocity template

具体来说,我尝试在模板中创建一个 Locale 对象,将其传递到 $dateTool.format 调用中,以获取特定语言的输出。

我无法创建区域设置对象并将其预先传递到模板中,因为该代码可以调用各种模板,每个模板都可以采用不同的语言。

我已经尝试过

#set($localeClass = $portal.getClass().forName("java.util.Locale"))
$localeClass.getName

但这只是输出“$localeClass.getName”(我不确定 $portal 是否是某种神奇的预设变量或其他东西)。

我也尝试过

#set($localeClass = java.util.Locale.class)
$localeClass.getName

但是当我尝试处理模板时,这给了我一个运行时异常。

我看到了ClassTool Velocity 中存在,但不支持代码的反射执行。我想我可以尝试类似 $classTool.inspect("java.util.Locale").getType.getConstructor([$classTool.inspect("java.util.String"),$classTool.inspect("java .util.String")]).newInstance(["es","ES"])

我会尝试一下,但同时我会看看其他人是否有更好的想法。

编辑

自从发帖以来,我意识到velocity有一个ConversionTool(它没有在他们的GenericTool概述页面上列出),它有一个我可以调用的toLocale函数。所以我可以使用

$dateTool.format('dd-MMM-yyyy', $date, $conversionTool.toLocale("es_ES"))

但我仍然很好奇是否有办法通过反射来完成此任务。

最佳答案

你做得很好,但你应该使用$localeClass.getName()$localeClass.name而不是$localeClass.getName。请参阅Property Lookup Rules在 Velocity 用户指南中。

这个:

#set($localeClass = $portal.getClass().forName("java.util.Locale"))
$localeClass.getName()

为我正确输出字符串“java.util.Locale”。

关于velocity - 在速度模板中创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12321029/

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