速度模板 - 新线

时间:2010-12-28 20:52:27

标签: java templates velocity

我一直在使用Apache的Velocity引擎和自定义模板 问题是,我无法生成具有相应换行符的String。 我尝试了几乎所有我找到的东西,例如使用$ esc.n和$ esc.newline(我已经在我的项目中使用了逃生工具)但似乎我目前使用的版本不支持它(1.4 ),检查是否可以使用'\ n','\\ n'甚至'\\\ n',但同样的事情。

有没有人对此有任何解决方案?

6 个答案:

答案 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可能最简单。

请参阅此链接:https://velocity.apache.org/tools/releases/2.0/javadoc/org/apache/velocity/tools/generic/EscapeTool.html#getNewline%28%29

用法示例: 换行符:$ 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 ?