有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您需要在上下文中放入一个列表,foreach才能工作,如下所示:

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