繁体   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