簡體   English   中英

速度模板 - 換行

[英]Velocity Templates - New Line

我一直在使用 Apache 的 Velocity 引擎和自定義模板。
問題是,我無法生成帶有相應換行符的字符串。 我嘗試了幾乎所有我發現的東西,例如使用 $esc.n 和 $esc.newline (我已經在我的項目中使用轉義工具)但似乎我當前使用的版本不支持它(1.4 ), 檢查放置 '\n', '\\n' 甚至 '\\\n' 是否有效,但同樣的事情。

有人對此有任何解決方案嗎?

我們遇到了換行符問題,最終在 VelocityContext 上放置了一個屬性:

VelocityContext ctx = new VelocityContext();
ctx.put("newline", "\n");

然后,在需要使用換行符的任何地方,我們都會引用上下文變量:

$newline

我們在需要用 <br /> 替換字符串中的換行符的情況下使用它。

我需要一個新行來生成 javascript。 嗯,我當然不需要它,但它使開發時閱讀生成的代碼更容易。 在這種情況下,我只是設置了一個變量,以便速度更容易閱讀。 這就是你所需要的:

速度代碼:

#set( $newline="
")
#set( $jsCode = "var bling='blang';{$newline}var bark='bite';{$newline}" )
<script>
$jsCode</script>

結果:

<script>
var bling='blang';
var bark='bite';
</script>

您是否使用 Velocity 生成 HTML 內容? 在這種情況下,請記住您需要使用<br>而不是換行符。

如果你真的想要一個換行符,你只需輸入實際的換行符,即按回車鍵。 Velocity 中沒有像 \\n 這樣的轉義序列。

如果您使用的是 Velocity 1.5 或更高版本,您也可以將新行放在那里:

#set( $foo = "this has a 
line break" ) 

在 Velocity 1.4 中,字符串中的換行符不起作用,也沒有escapeTool.getNewline()存在。 如果您無法向上下文添加任何內容,這里有一個 Velocity-only hack 來生成任意字符:

#macro(chr $charCode $str)
  #set($str="0")
  #set($chars=$str.charAt(0).toChars($charCode))
  #set($str="")
  #foreach($char in $chars)
    #set($str="$str$char")
  #end
#end

#chr(10 $nl)

First Line${nl}Second Line

它使用Character.toChars()將 ASCII 碼0x0A = 10轉換為char[] ,然后將其組裝成字符串。 這樣就可以生成任何字符,例如

#chr(129299 $nerd) ## U+1F913 => 0x1F913 = 129299
$nerd
## outputs 🤓

簡單地使用 Velocity EscapeTool 可能是最簡單的。

請參閱此鏈接: https : //velocity.apache.org/tools/releases/2.0/javadoc/org/apache/velocity/tools/generic/EscapeTool.html#getNewline%28%29

示例用法:在此處換行:$esc.newline 這是在新行上。

只需在這里投入我的兩分錢,這就是我想出的:

#set( $E = "" )
#set ( $System = $E.class.forName('java.lang.System'))
#set( $NL = $System.lineSeparator() )

使用時, $NL會產生一個換行符。

另請注意,如果您處於循環中,則可能根本不需要那么麻煩。 例如:

#set( $s = "abc" )
#foreach( $e in $s.split("") )
$e
#end

已經會生產

a
b
c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM