Vignesh
Vignesh

Reputation: 23

Java Velocity foreach loop

I have an ArrayList that im populating within java and passing it off to a velocity template for consumption. Now when i try iterating the list and creating a 'comma' separated string from the list, Im observing an erratic behavior.

The following is my code

> #set($list_str="")
> #foreach($item in $list)
>     #set($list_str=$!list_str+$!item+",")
> #end

Now i see that my variable $list_str has all the elements of the list but at the end the variable name of the iterator '$!item' is also being appended.

So, say my list has [0,1,2,3,4], my end result(value of $list_str) is [0,1,2,3,4],$!item,

Im not sure if this is because of a null reference from within the list being populated and being passed to the velocity template.

Any pointers towards fixing this would be greatly appreciated.

Thanks

Upvotes: 2

Views: 9686

Answers (2)

nandihno
nandihno

Reputation: 1

Use the velocity tools to do this eg

#set($display = $utils.getClass().forName("org.apache.velocity.tools.generic.DisplayTool").newInstance())
#set($myArray=["nando","bob","don"])
$display.list($myArr,",")

Thats it the result will be nando,bob,don if you dont include the second parameter in the list method you get nando,bob and don

Upvotes: 0

ping
ping

Reputation: 1239

I did a quick check and this seems to be because of a null value in your ArrayList.

For an ArrayList populated as below --

ArrayList list=new ArrayList();
        list.add("try");
        list.add("to");
        list.add("figure");
        list.add("it");

and with a velocity code as below --

#foreach($iter in $list)
    $!iter
    #set($list_str=$!list_str+$!iter+",")
#end
$!list_str

I get the following output --

try
    to
    figure
    it
try,to,figure,it,

which seems to be as expected.

Now when i populate my Arraylist as follows --

ArrayList list=new ArrayList();
        list.add("try");
        list.add("to");
        list.add("figure");
        list.add("it");
        list.add(null);

and with the same velocty code as above, i get the following output --

try
    to
    figure
    it

try,to,figure,it,$!iter,

So , im guessing that you need to add a null check somewhere in your code to avoid this.

Thanks p1nG

PS: As pointed out by @Thilo Im not sure where the brackets are from, not sure if this is the desired behavior.

Upvotes: 4

Related Questions