我有一个ArrayList,它在java中填充并将其传递给速度模板供消费。现在,当我尝试迭代列表并从列表中创建一个“逗号”分隔的字符串时,我会观察到一种不稳定的行为。
以下是我的代码
> #set($list_str="")
> #foreach($item in $list)
> #set($list_str=$!list_str+$!item+",")
> #end
现在我看到我的变量$ list_str包含了列表的所有元素,但最后还附加了迭代器'$!item'的变量名。
So, say my list has [0,1,2,3,4], my end result(value of $list_str) is [0,1,2,3,4],$!item,
我不确定这是否是因为正在填充的列表中的空引用并被传递给速度模板。
任何有关修复此事的指示都将非常感激。
谢谢
答案 0 :(得分:4)
我做了一个快速检查,这似乎是因为你的ArrayList中的空值。
对于填充如下的ArrayList -
ArrayList list=new ArrayList();
list.add("try");
list.add("to");
list.add("figure");
list.add("it");
并使用以下速度代码 -
#foreach($iter in $list)
$!iter
#set($list_str=$!list_str+$!iter+",")
#end
$!list_str
我得到以下输出 -
try
to
figure
it
try,to,figure,it,
似乎与预期一样。
现在我按照以下方式填充我的Arraylist -
ArrayList list=new ArrayList();
list.add("try");
list.add("to");
list.add("figure");
list.add("it");
list.add(null);
并使用与上面相同的速度代码,我得到以下输出 -
try
to
figure
it
try,to,figure,it,$!iter,
所以,我猜你需要在你的代码中的某处添加一个空检查来避免这种情况。
由于 p1nG
PS:正如@Thilo所指出的,我不确定括号的来源,不确定这是否是所需的行为。
答案 1 :(得分:0)
使用力度工具执行此操作 例如
#set($display = $utils.getClass().forName("org.apache.velocity.tools.generic.DisplayTool").newInstance())
#set($myArray=["nando","bob","don"])
$display.list($myArr,",")
多数民众赞成,结果将是nando,bob,don 如果你不在列表方法中包含第二个参数 nando,bob and don