Java Velocity#foreach未按预期工作,字符串作为$value变量传递
我最近没有太多地使用Velocity,但我确信以前使用过的东西现在不起作用了——我能想到的唯一区别是,自从我上次使用它以来,现在我们从v1.6.4升级到了v1.7 在Java代码中,我们向脚本上下文添加了一个值,该值是一个逗号分隔的字符串,沿Java Velocity#foreach未按预期工作,字符串作为$value变量传递,java,string,foreach,velocity,Java,String,Foreach,Velocity,我最近没有太多地使用Velocity,但我确信以前使用过的东西现在不起作用了——我能想到的唯一区别是,自从我上次使用它以来,现在我们从v1.6.4升级到了v1.7 在Java代码中,我们向脚本上下文添加了一个值,该值是一个逗号分隔的字符串,沿 context.put("value", "'a','b','c'") (本例已对此进行了简化) 在我的速度代码中,如果我说: $value -- it prints 'a','b','c' $value.split(",")[0] -- it prin
context.put("value", "'a','b','c'")
(本例已对此进行了简化)
在我的速度代码中,如果我说:
$value -- it prints 'a','b','c'
$value.split(",")[0] -- it prints 'a'
$value.split(",").size() -- it prints 3
然而,如果我试着说
#foreach ( $val in $value.split(",") )
-- $val
#end
它不打印任何东西。事实上,如果我说
#set ( $val = $value.split(",") )
#if ( ! $val )
-- print null message here
#end
它进入if块并表示$val为null
有一次,我认为我会很聪明,按照下面的思路做一些事情
#set ( $count = $value.split(",").size() )
#foreach ( $item in [0..$count] )
-- reference $value.split(",")[$item]
#end
但它只是不想使用从$value派生的任何东西的RHS
最后,如果我做以下事情
#set ( $value = "'a','b','c'" )
#foreach ( $val in $value.split(",") )
-- Write out $val
#end
它完全按照预期工作。将其作为变量传递到引擎中会导致无法正确处理
有人知道为什么这样不行吗?有什么可行的解决办法吗
提前感谢,
p、 s.您需要将一个列表放入上下文中,foreach才能正常工作,如下所示:
context.put("value", Arrays.asList("a", "b", "c"));
谢谢,但不是我想要的答案。如果这是严格正确的,最后一个例子也不会起作用,但它确实起作用了。。。split()返回一个字符串数组,该数组应该是可编辑的-在web上有无数这样的例子,但我无法确定其中是否有一个是在v1.7中完成的…你确定没有像“变量名中有输入错误”这样简单的答案吗?它确实应该可以工作,并且在一个简单的测试中对我有效。您的语句“将它作为变量传递到引擎中会导致它无法正确处理”似乎是一个可能的解释,因为我也无法让它工作,除非我在中的
右侧执行拆分。