[英]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.