配置速度以使用 toString 以外的其他内容渲染对象?
有没有办法将 Velocity 配置为使用 toString() 以外的其他方法将对象转换为模板中的字符串? 例如,假设我使用带有 format() 方法的简单日期类,并且每次都使用相同的格式。 如果我所有的速度代码看起来像这样:
$someDate.format('M-D-yyyy')
是否有一些我可以添加的配置让我只是说
$someDate
? (假设我不能只编辑日期类并给它一个适当的 toString())。
我正在使用 WebWork 构建的 Web 应用程序的上下文中执行此操作(如果有帮助的话)。
Is there a way to configure Velocity to use something other than toString() to convert an object to a string in a template? For example, suppose I'm using a simple date class with a format() method, and I use the same format every time. If all of my velocity code looks like this:
$someDate.format('M-D-yyyy')
is there some configuration I could add that would let me just say
$someDate
instead? (Assuming I'm not in a position to just edit the date class and give it an appropriate toString()).
I'm doing this in the context of a webapp built with WebWork, if that helps.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您还可以创建自己的 ReferenceInsertionEventHandler 来监视您的日期并自动为您进行格式化。
You could also create your own ReferenceInsertionEventHandler that watches for your dates and automatically does the formatting for you.
Velocity 允许使用类似于 JSTL 的实用程序,称为 velocimacros:
http://velocity。 apache.org/engine/devel/user-guide.html#Velocimacros
这将允许您定义一个宏,例如:
然后像这样调用它:
Velocity allows for a JSTL like utility called velocimacros:
http://velocity.apache.org/engine/devel/user-guide.html#Velocimacros
This would allow you to define a macro like:
And then call it like so:
哦,Velocity 的 1.6+ 版本有一个新的 Renderable 接口。 如果您不介意将日期类绑定到 Velocity API,则实现此接口,Velocity 将使用 render(context, writer) 方法(对于您的情况,您只需忽略上下文并使用 writer)而不是 toString( )。
Oh, and the 1.6+ versions of Velocity have a new Renderable interface. If you don't mind tying your date class to a Velocity API, then implement this interface and Velocity will use the render(context, writer) method (for your case, you just ignore the context and use the writer) instead of toString().
我也遇到了这个问题,并且能够根据 内森·布布纳回答。
我只是想通过提供 Velocity 文档的链接来完成答案< /a> 解释了如何使用事件处理程序。
就我而言,每次插入引用时,我都需要 Velocity 调用“getAsString”而不是 gson 库中所有 JsonPrimitive 对象的 toString 方法。
就像创建一个
并将事件添加到 VelocityContext一样简单
I faced this problem too and I was able to solve it based on Nathan Bubna answer.
I'm just trying to complete the answer providing the link to Velocity documentation which explains how to use EventHandlers.
In my case, I needed Velocity calls "getAsString" instead of toString method for all JsonPrimitive objects from gson library every time that a reference was inserted.
It was as simple as creating a
And add the event to the VelocityContext