java Velocity#foreach在字符串作为$value变量传递时未按预期工作
我最近没有太多使用Velocity,但我确定以前使用过的东西现在不起作用了——我能想到的唯一区别是,自从我上次使用它到现在,我们从v1升级了。6.4到v1。七,
在我们的Java代码中,我们向脚本上下文中添加了一个值,该值是一个逗号分隔的字符串,沿着
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为空
有一次,我觉得自己会很聪明,按照下面的思路做一些事情
#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
它完全按照预期工作。将其作为变量传递到引擎中会导致无法正确处理
有人知道为什么这样不行吗?有什么可行的解决办法吗
提前谢谢
附言
# 1 楼答案
您需要在上下文中放入一个列表,foreach才能工作,如下所示: