速度指令也添加空格?

时间:2011-12-13 19:58:19

标签: java templates velocity

我刚刚了解到,使用apache velocity,指令也会添加到空格中。

例如:

#foreach ($record in $rows)
#foreach($value in $record)
$value  
#end

#end

有了这样的话,我最终得到了#foreach语句,#end语句等的额外行。

这不是我想要的,所以我发现我可以在行尾阻止评论,如下:

#foreach ($record in $rows)#*
*##foreach($value in $record)#*
*#$value    #*
*##end

#end

但是阅读起来非常难看。有没有办法告诉速度引擎不要格式化我的指令?

也许我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:4)

我认为你坚持使用它(参见Velocity Whitespace Gobbling文章)虽然行评论会更整洁:

#foreach ($record in $rows)##
#foreach($value in $record)##
$value    ##
#end

#end

或者你可以把所有东西都挤到一行:

#foreach($record in $rows)#foreach($value in $record)${value}#{end}#{end}

答案 1 :(得分:1)

这几乎对所有模板语言都很常见,而且推理直接来自简化处理。考虑以下示例(这实际上是Grails使用的GSP,但想法是相同的):

<g:each var="x" in="exes">
    ${x.y}
</g:each>

处理此方法的方法是首先识别标签(或Velocity的情况,指令)。因为标签/指令本身包含处理标签正文的指令,所以标签/指令标记被删除,并且紧跟在起始标记之后和结束标记之前的所有内容被用作处理的目标。这包括所有空格,因为预先清理输出会更加困难。

这当然并不意味着你不能这样做,正如Edd所指出的那样,或者说这将是最明智的设计选择,但有时做更简单的事情比产生漂亮的标记更重要 - 毕竟,大多数(如果不是所有)标记处理器都不关心您是<p>some\ncontent</p>还是<p>some\n\n\n\t\tcontent</p>