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

标签 velocity

我已经看过这个问题了,但它谈论的是 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/

相关文章:

java - 为什么速度没有取代值(value)?

java - Css 未在速度模板(JAVA)中呈现

java - 我可以将 Velocity 模板与 InputStreams 一起使用吗?

java - 有没有办法打印所有速度上下文?

java - 使用速度的嵌套模板

java - 正则表达式replaceAll不适用于速度模板

swift - 向左滑动框架超出固定点,然后通过向右滑动更新框架来改变方向,获取运动平移差异

javascript - 计算鼠标速度的脚本的概念

java - 正则表达式在 Velocity 模板中不起作用

java - 如何在 liferay 的速度模板中创建 sortedmap 或 treemap