我想在 Velocity 宏的列表中添加一个元素。这是避免“真实”文本出现在 Velocity 输出中的唯一方法吗?
#set($path = [])
#set($swallow = "a")
#set ($swallow = $path.add("blaablaa"))
我想在 Velocity 宏的列表中添加一个元素。这是避免“真实”文本出现在 Velocity 输出中的唯一方法吗?
#set($path = [])
#set($swallow = "a")
#set ($swallow = $path.add("blaablaa"))
是的,如果你想闭嘴,那么#set 就是你的朋友。许多人使用这样的宏来简化它:
#macro( call $this )#set( $stfu = $this )#end
然后你可以缩写为
#call( $path.add('blaablaa') )
我必须同意 Terence Parr(StringTemplate之父)的观点,他在Artima 采访中发表了相关评论,并发表了一篇关于模型视图分离的好论文。
模板应仅限于纯粹的展示。正如我们不应该将表示层的细节放在模型中一样,我们也不应该将数据操作放在我们的模板中。做任何一个通常都会使维护变得更加困难,甚至更难知道在哪里进行维护。
根据我自己对 Velocity 和 StringTemplate 的经验,我强烈建议您将问题中的问题(数据操作的工件使模板更复杂)作为提示,并将所有数据结构的操作移至 Java 层。