如何配置Velocity模板引擎以避免合并结果中的自动回车?

时间:2011-04-26 09:30:09

标签: java velocity

我正在使用Velocity(1.5)使用模板+数据源生成一些文本。

我需要处理新行,因为合并结果不是HTML而是文本。

我有这种模板(beanInContext是一个数据矩阵,就像excel电子表格一样)

[begin TPL]
  $beanInContext.prepare("someData");
  $beanInContext.anotherOperation(1234);
  #foreach( $row in $beanInContext.rows() )
    #foreach($data in $row.data())
      $data
    #end
  #end 
[end TPL]

我希望合并的结果是这样的:

a1 b1 c1
a2 b2 c2
...

但我有类似的东西:

a1
    b1
  c1
  a2  
    b2  
  c2  
  ...

使用类似的模板引擎freemarker时,我使用了< #compress> 指令来实现这种格式化。

有人知道如何配置速度引擎以避免这种回车混乱?

2 个答案:

答案 0 :(得分:3)

Velocity与JSP一样,目前不提供空白管理的实际帮助。它已经讨论得很多,但没有人加紧实施这个功能。你会发现使用像JTidy这样的东西来后处理Velocity输出要好得多。预计Velocity 2.0的空白处理会有所改善,但是按照这个速度,不要指望Velocity 2.0能用几年。工作很慢。

如果空格控制很关键并且后处理不是一个选项,我建议使用Freemarker。

如果你必须使用Velocity,请注意1.5有一些重大的性能问题。我强烈建议升级到1.7。

答案 1 :(得分:2)

我可能没有完全正确,但这是如何做到的基本技巧:

> [begin TPL]
> $beanInContext.prepare("someData");
> $beanInContext.anotherOperation(1234);
> #foreach( $row in $beanInContext.rows() )
> #**##foreach($data in $row.data())##
> #*    *#$data##
> #**##end##
> #end 
> [end TPL]