有没有办法将 Velocity 配置为使用 toString() 以外的其他方法将对象转换为模板中的字符串?例如,假设我使用带有 format() 方法的简单日期类,并且每次都使用相同的格式。如果我所有的速度代码如下所示:

$someDate.format('M-D-yyyy')

我可以添加一些配置吗?

$someDate

反而?(假设我无法只编辑日期类并为其提供适当的 toString())。

我正在使用 WebWork 构建的 Web 应用程序的上下文中执行此操作(如果有帮助的话)。

有帮助吗?

解决方案

您还可以创建自己的ReferenceInsertionEventHandler该手表日期和自动完成格式化你。

其他提示

速度允许像效用称为Velocity宏一个JSTL:

http://velocity.apache.org/engine/devel /user-guide.html#Velocimacros

这将允许你定义诸如宏:

#macro( d $date)
   $date.format('M-D-yyyy')
#end

和然后调用它像这样:

#d($someDate)

喔,和1.6+版本速度的有一个新的渲染界面。如果你不介意你绑Date类的速度API,那么实现这个接口和速度将使用渲染(背景下,作家)方法(对于你的情况,你只是忽略的背景和使用作家)代替的toString( )。

我也遇到了这个问题,我能够根据 内森·布布纳 回答.

我只是想完成提供的答案 链接到 Velocity 文档 其中解释了如何使用事件处理程序。

就我而言,每次插入引用时,我都需要 Velocity 调用“getAsString”而不是 gson 库中所有 JsonPrimitive 对象的 toString 方法。

就像创建一个一样简单

public class JsonPrimitiveReferenceInsertionEventHandler implements ReferenceInsertionEventHandler{

    /* (non-Javadoc)
     * @see org.apache.velocity.app.event.ReferenceInsertionEventHandler#referenceInsert(java.lang.String, java.lang.Object)
     */
    @Override
    public Object referenceInsert(String reference, Object value) {
        if (value != null && value instanceof JsonPrimitive){
            return ((JsonPrimitive)value).getAsString();
        }
        return value;
    }

}

并将事件添加到 VelocityContext

vec = new EventCartridge();
vec.addEventHandler(new JsonPrimitiveReferenceInsertionEventHandler());

...

context.attachEventCartridge(vec);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top