我正在使用mvn archetype:generate来模拟我项目中的一些东西。我在使用Maven 3.2.2 Velocity Engine split()方法时遇到了麻烦。我还没弄清楚Velocity Maven正在使用什么版本。
#set($foo = "one:a, two:b, three:c")
$!foo
$foo.split(",")
#foreach($bar in $foo.split(","))
$!bar
$bar.split(":")
#set($number = $bar.split(":").get(0))
number = $!number
#set($letter = $bar.split(":").get(1))
letter = $!letter
#end
预期产出:
one:a, two:b, three:c
['one:a', 'two:b', 'three:c']
one:a
['one', 'a']
number = one
letter = a
two:b
...
实际输出:
one:a, two:b, three:c
[Ljava.lang.String;@6cff380
one:a
[Ljava.lang.String;@5a587f23
number =
letter =
two:b
[Ljava.lang.String;@2c8b586a
...
正如你所看到的,#foreach块中使用的第一个split()工作正如我期望用逗号分割字符串并迭代三个子字符串,但是当我打印$ bar.split(“:”)时,我得到了奇怪的字符串指针和#set($ number = $ bar.split(“:”)。get(0))什么都不打印,因为.get()是在String而不是Array上调用的。考虑到这一点,我能够想出这个可怕的黑客:
#foreach ($bar in $foo.split(","))
#set ($i = 0)
#foreach($hack in $bar.split(":"))
#if($i == 0)
#set ($number = $hack)
#else
#set ($letter = $hack)
#end
#set($i = $i + 1)
#end
number = $number
letter = $letter
#end
但必须有一个更好的方法,我不能在良心上使用这个代码。我一直在使用Velocity总共3个小时,所以我肯定会责怪这里,#foreach知道我不知道什么?
感谢您的帮助。
编辑:根据this maven archetype正在使用Velocity Engine 1.5
答案 0 :(得分:1)
[Ljava.lang.String;@6cff380
不是字符串引用,它是一个字符串数组引用,所以到目前为止,eveything是正常的(除非Velocity可以格式化数组而不是输出其toString()方法)
然后,当你在数组上调用get(i)
时,你什么都得不到,而自从Velocity 1.6你应该得到你想要的东西,那就是 ith 元素。我猜你的Velocity版本太旧了......