配置速度以使用 toString 以外的其他内容渲染对象?
题
有没有办法将 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);
不隶属于 StackOverflow