我一直在使用Apache Velocity引擎和自定义模板。
问题是,我无法生成带有相应换行的字符串。
我尝试过几乎所有我找到的方法,例如使用$esc.n和$esc.newline(我已经在项目中使用了转义工具),但似乎我当前使用的版本不支持它们(1.4)。我尝试过将'\n'、'\\n'甚至是'\\\\n'放入字符串中,但结果都一样。
是否有人有解决方案?
我一直在使用Apache Velocity引擎和自定义模板。
问题是,我无法生成带有相应换行的字符串。
我尝试过几乎所有我找到的方法,例如使用$esc.n和$esc.newline(我已经在项目中使用了转义工具),但似乎我当前使用的版本不支持它们(1.4)。我尝试过将'\n'、'\\n'甚至是'\\\\n'放入字符串中,但结果都一样。
是否有人有解决方案?
VelocityContext ctx = new VelocityContext();
ctx.put("newline", "\n");
然后,无论我们在哪里需要使用换行符,我们都会引用上下文变量:
$newline
我们在需要将字符串中的换行符替换为<br />时使用它。
我需要一行新的代码来生成javascript。当然,我并不是真正的“需要”,但在开发过程中这样做可以使生成的代码更容易阅读。在这种情况下,我只需设置一个变量,以便Velocity更容易阅读。以下是您所需要的内容:
#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的转义序列。
#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
0x0A = 10
转换为char[]
,然后将其组装成字符串。这样就可以生成任何字符,例如:#chr(129299 $nerd) ## U+1F913 => 0x1F913 = 129299
$nerd
## outputs
我在这里贡献我的意见,以下是我的想法:
#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
最简单的方法可能是使用Velocity EscapeTool。
示例用法: 在此换行:$esc.newline 这是在新行上。