2011-12-13 9 views
7

私は、apacheの速度でディレクティブが空白に追加されることを知りました。など私は#foreach文、#end文の余分な行を取得してしまう。このようなものでvelocityディレクティブも余白を追加しますか?

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

#end 

これは私が欲しいものではありませんので、私:例えばだから、

私はこのような行末のコメントをブロックすることができます:

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

#end 

しかし、これは読んでかなり醜いです。速度エンジンに指示をフォーマットしないように指示する方法はありますか?

多分私は何か間違っているのですか?

ありがとうございました。

+0

これはVelocityでいつも迷惑をかけるものです。私はそれを使ってJavaを生成するので、生成後にIDEでフォーマットすることができます。 JET(Javaエミッターテンプレート)はこの問題を抱えていないようです。 –

+0

これは、あとで整理して整理したものです。この[の質問](http://stackoverflow.com/questions/2277494/need-a-java-based-html-prettifier-to-clean-up-velocity-generated-html)生成後にHTMLを整理することについて。 –

+0

うん、それは吸う。私は私の "回避策"がそれをしなければならないと思います。 – javamonkey79

答えて

4

行のコメントは少し整然とだろうが、私は(Velocity Whitespace Gobblingの記事を参照してください)あなたはそれで立ち往生していると思う:

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

#end 

それとも、ただ1行にすべてを絞ることができます:

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

##は私のためには機能しません。私のマクロを一つの行に置くだけです。なぜこのようなアイデアですか? –

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>を持っていれば、ほとんどすべてのマークアッププロセッサが本当に気にしません。

関連する問題