Java Velocity foreach loop - PullRequest
       8

Java Velocity foreach loop

2 голосов
/ 13 июня 2011

У меня есть 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,

Я не уверен, что этоиз-за нулевой ссылки из списка, который заполняется и передается в шаблон скорости.

Будем весьма благодарны за любые указания на исправление.

Спасибо

Ответы [ 2 ]

4 голосов
/ 13 июня 2011

Я сделал быструю проверку, и это, кажется, из-за нулевого значения в вашем 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, я не уверен, откуда взяты скобки, не уверен, что это желаемое поведение.

0 голосов
/ 21 апреля 2016

Используйте для этого инструменты скорости, например,

#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 и don

...