我一直在使用Apache的Velocity引擎和一个自定义模板。问题是,我还没有能够生成一个带有相应换行符的字符串。我几乎尝试了我找到的所有方法,比如使用$esc.n和$esc.newline(我已经在项目中使用了转义工具),但我当前使用的版本似乎不支持它(1.4),检查是否可以输入'\n'、'\n'甚至'\\n',但情况相同。有没有人对此有什么解决办法?
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>
5f0d552i2#
您是否使用Velocity生成HTML内容?在这种情况下,请记住您需要使用<br>,而不是换行符。如果你真的需要一个新的行字符,你只需输入实际的新行字符,即按回车键。没有像Velocity中的\n那样的转义序列。
<br>
dpiehjr43#
如果您使用Velocity 1.5或更高版本,您也可以在其中添加新行:
#set( $foo = "this has a line break" )
yeotifhr4#
在Velocity 1.4中,字符串中的换行符都不起作用,escapeTool.getNewline()也不存在。如果你不可能向上下文中添加任何内容,这里有一个只在Velocity中生成任意字符的方法:
escapeTool.getNewline()
#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[],然后将其组装成字符串。
0x0A = 10
char[]
#chr(129299 $nerd) ## U+1F913 => 0x1F913 = 129299 $nerd ## outputs 🤓
vc9ivgsu5#
最简单的方法可能是直接使用Velocity EscapeTool。查看此链接:https://velocity.apache.org/tools/releases/2.0/javadoc/org/apache/velocity/tools/generic/EscapeTool.html#getNewline%28%29示例用法:在此处换行:$esc.newline这是一个新行。
zfycwa2u6#
在这里,我想说的是,这是我的想法:
#set( $E = "" ) #set ( $System = $E.class.forName('java.lang.System')) #set( $NL = $System.lineSeparator() )
使用时,$NL会产生换行符。另外请注意,如果您处于循环中,则可能根本不需要这种麻烦。例如:
$NL
#set( $s = "abc" ) #foreach( $e in $s.split("") ) $e #end
将已经产生了
a b c
cgfeq70w7#
我们遇到了换行符问题,最后在VelocityContext上添加了一个属性:
VelocityContext ctx = new VelocityContext(); ctx.put("newline", "\n");
然后,在需要使用换行符的任何地方,我们都将引用上下文变量:
$newline
在需要将字符串中的换行符替换为。
7条答案
按热度按时间of1yzvn41#
我需要一个新的行来生成javascript。当然,我并不 * 需要 * 它,但是它使得在开发时阅读生成的代码更容易。在这个例子中,我只是设置了一个变量,这样Velocity就更容易阅读了。这就是你所需要的:
速度代码:
结果:
5f0d552i2#
您是否使用Velocity生成HTML内容?在这种情况下,请记住您需要使用
<br>
,而不是换行符。如果你真的需要一个新的行字符,你只需输入实际的新行字符,即按回车键。没有像Velocity中的\n那样的转义序列。
dpiehjr43#
如果您使用Velocity 1.5或更高版本,您也可以在其中添加新行:
yeotifhr4#
在Velocity 1.4中,字符串中的换行符都不起作用,
escapeTool.getNewline()
也不存在。如果你不可能向上下文中添加任何内容,这里有一个只在Velocity中生成任意字符的方法:它使用Character.toChars()将ASCII码
0x0A = 10
转换为char[]
,然后将其组装成字符串。vc9ivgsu5#
最简单的方法可能是直接使用Velocity EscapeTool。
查看此链接:https://velocity.apache.org/tools/releases/2.0/javadoc/org/apache/velocity/tools/generic/EscapeTool.html#getNewline%28%29
示例用法:在此处换行:$esc.newline这是一个新行。
zfycwa2u6#
在这里,我想说的是,这是我的想法:
使用时,
$NL
会产生换行符。另外请注意,如果您处于循环中,则可能根本不需要这种麻烦。例如:
将已经产生了
cgfeq70w7#
我们遇到了换行符问题,最后在VelocityContext上添加了一个属性:
然后,在需要使用换行符的任何地方,我们都将引用上下文变量:
在需要将字符串中的换行符替换为。