【问题标题】:Velocity Engine split() returns String instead of ArrayVelocity Engine split() 返回字符串而不是数组
【发布时间】:2015-05-11 05:47:09
【问题描述】:

我正在使用 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() 是在字符串而不是数组上调用的。考虑到这一点,我想出了这个可怕的黑客:

#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 原型正在使用 Velocity Engine 1.5

【问题讨论】:

    标签: maven velocity maven-archetype


    【解决方案1】:

    [Ljava.lang.String;@6cff380 不是字符串引用,它是字符串数组引用,所以到目前为止,一切正常(除了 Velocity 可以格式化数组而不是输出其 toString() 方法)。

    然后,当您在数组上调用 get(i) 时,您什么也得不到,而从 Velocity 1.6 开始,您应该得到您想要的,那就是 ith 元素。我只是猜你的 Velocity 版本太旧了......

    【讨论】:

    • 我在发布后认为 [ 可能表示一个数组,但不确定。谢谢lcarifying。我很确定我使用的是 Velocity Engine 1.5,documentation 表示它支持数组上的 .get(index) 操作,所以不确定它为什么不起作用。
    • 正如我在回答中所说,.get(index) 仅适用于 1.6,因此它在 1.5 中不起作用是很正常的。
    • 是的,我为 1.6.2 找到了一个实际的 change log,它显示了他们添加 get(index) 的位置,是的文档差异!
    猜你喜欢
    • 2011-09-20
    • 2017-10-09
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多