java Velocity模板-新产品线

kxeu7u2r  于 2022-12-10  发布在  Java
关注(0)|答案(7)|浏览(126)

我一直在使用Apache的Velocity引擎和一个自定义模板。
问题是,我还没有能够生成一个带有相应换行符的字符串。我几乎尝试了我找到的所有方法,比如使用$esc.n和$esc.newline(我已经在项目中使用了转义工具),但我当前使用的版本似乎不支持它(1.4),检查是否可以输入'\n'、'\n'甚至'\\n',但情况相同。
有没有人对此有什么解决办法?

of1yzvn4

of1yzvn41#

我需要一个新的行来生成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>
5f0d552i

5f0d552i2#

您是否使用Velocity生成HTML内容?在这种情况下,请记住您需要使用<br>,而不是换行符。
如果你真的需要一个新的行字符,你只需输入实际的新行字符,即按回车键。没有像Velocity中的\n那样的转义序列。

dpiehjr4

dpiehjr43#

如果您使用Velocity 1.5或更高版本,您也可以在其中添加新行:

#set( $foo = "this has a 
line break" )
yeotifhr

yeotifhr4#

在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 🤓
vc9ivgsu

vc9ivgsu5#

最简单的方法可能是直接使用Velocity EscapeTool。
查看此链接:https://velocity.apache.org/tools/releases/2.0/javadoc/org/apache/velocity/tools/generic/EscapeTool.html#getNewline%28%29
示例用法:在此处换行:$esc.newline这是一个新行。

zfycwa2u

zfycwa2u6#

在这里,我想说的是,这是我的想法:

#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
cgfeq70w

cgfeq70w7#

我们遇到了换行符问题,最后在VelocityContext上添加了一个属性:

VelocityContext ctx = new VelocityContext();
ctx.put("newline", "\n");

然后,在需要使用换行符的任何地方,我们都将引用上下文变量:

$newline

在需要将字符串中的换行符替换为。

相关问题