2011-12-13 60 views
7

我剛剛瞭解到,使用apache速度,指令也會添加到空白處。速度指令也添加空格?

因此,例如:

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

#end 

像這樣的東西我最終得到額外的線路爲#foreach報表時,#end報表等

這不是我想要的東西,所以我發現我可以阻止評論在行末如下所示:

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

#end 

但這是相當醜陋的閱讀。有什麼辦法可以告訴速度引擎不要格式化我的指令嗎?

也許我在做別的事情嗎?

謝謝。

+0

這是Velocity一直讓我煩惱的一件事 - 我使用它來生成Java,所以我可以在生成後將其格式化爲我的IDE。 JET(Java發射器模板)似乎沒有受到這個問題的困擾。 – 2011-12-13 21:31:28

+0

這似乎是人們稍後忍受和整理的東西,例如這個[SO問題](http://stackoverflow.com/questions/2277494/need-a-java-based-html-prettifier-to-clean-up-velocity-generated-html)關於整理HTML後代。 – 2011-12-13 21:38:37

回答

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

這對於幾乎所有的模板語言都是常見的,推理直接來自簡化處理。請看下面的例子(這實際上是Grails的使用GSP但這個想法是一樣的):

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

本的處理方式是,第一標籤(或速度的情況下,指令)是鑑定。因爲標籤/指令本身包含用於處理標籤主體的指令,所以標籤/指令標記被移除,並且緊接在起始標記之後和結束標記之前的所有內容被用作處理的目標。這包括所有的空白,因爲事先清理輸出會困難得多。

這當然不意味着你不能這麼做,就像埃德指出的那樣,或者這將是最明智的設計選擇,但有時候做更簡單的事情比產生美麗更重要標記 - 畢竟,大多數(如果不是所有的)標記處理器並不在意你是否有<p>some\ncontent</p><p>some\n\n\n\t\tcontent</p>