我一直在使用Apache的Velocity引擎和自定义模板 问题是,我无法生成具有相应换行符的String。 我尝试了几乎所有我找到的东西,例如使用$ esc.n和$ esc.newline(我已经在我的项目中使用了逃生工具)但似乎我目前使用的版本不支持它(1.4 ),检查是否可以使用'\ n','\\ n'甚至'\\\ n',但同样的事情。
有没有人对此有任何解决方案?
答案 0 :(得分:17)
我们遇到了换行问题,并最终在VelocityContext上添加了一个属性:
VelocityContext ctx = new VelocityContext();
ctx.put("newline", "\n");
然后,无论我们需要使用换行符,我们都会引用上下文变量:
$newline
我们在需要用< br />替换字符串中的换行符的情况下使用它。
答案 1 :(得分:7)
我需要一个用于生成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>
答案 2 :(得分:4)
您使用Velocity生成HTML内容吗?在这种情况下,请记住您需要使用<br>
而不是换行符。
如果你真的想要一个新的行字符,你只需要输入实际的新行字符,即按回车键。在Velocity中没有像\ n那样的转义序列。
答案 3 :(得分:4)
如果您使用的是Velocity 1.5或更高版本,您也可以将新行放在那里:
#set( $foo = "this has a
line break" )
答案 4 :(得分:0)
简单地使用Velocity EscapeTool可能最简单。
用法示例: 换行符:$ esc.newline这是一个新行。
答案 5 :(得分:0)
在Velocity 1.4中,字符串中的换行符都不起作用,escapeTool.getNewline()
也不存在。如果您无法在上下文中添加任何内容,则可以使用仅限Velocity的技巧来生成任意字符:
#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 ?