#java #foreach #velocity
#java #foreach #скорость
Вопрос:
У меня есть ArrayList, который я заполняю в java и передаю его в шаблон velocity для использования. Теперь, когда я пытаюсь выполнить итерацию списка и создать из списка строку, разделенную запятой, я наблюдаю неустойчивое поведение.
Ниже приведен мой код
> #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,
Я не уверен, связано ли это с тем, что нулевая ссылка из заполняемого списка передается в шаблон velocity.
Любые указания на исправление этого были бы высоко оценены.
Спасибо
Комментарии:
1. Вы уверены, что это не вызвано чем-то другим где-то? Можете ли вы вывести все промежуточные результаты для каждой итерации цикла? Кроме того, откуда взяты скобки в выходных данных?
Ответ №1:
Я быстро проверил, и, похоже, это из-за нулевого значения в вашем ArrayList.
Для списка массивов, заполненного следующим образом —
ArrayList list=new ArrayList();
list.add("try");
list.add("to");
list.add("figure");
list.add("it");
и с кодом velocity, как показано ниже —
#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, я не уверен, откуда взяты скобки, не уверен, является ли это желаемым поведением.
Ответ №2:
Используйте инструменты velocity для этого, например
#set($display = $utils.getClass().forName("org.apache.velocity.tools.generic.DisplayTool").newInstance())
#set($myArray=["nando","bob","don"])
$display.list($myArr,",")
Вот и все, результатом будет nando, bob, don
если вы не включите второй параметр в метод list, вы получите
нандо, Боб и Дон