Velocity #foreach没有按预期工作,字符串作为$ value变量传递

时间:2014-02-10 17:43:29

标签: 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 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

它完全按预期工作。有一些关于将它作为变量传递到引擎中的一些因素阻止它被正确处理。

任何人都知道为什么这不起作用?任何可能的解决方法?

提前致谢,

P.S。

1 个答案:

答案 0 :(得分:0)

您需要将一个列表放入上下文中以使其工作,如:

context.put("value", Arrays.asList("a", "b", "c"));