【问题标题】:Java Velocity foreach loopJava Velocity foreach 循环
【发布时间】:2011-09-13 19:20:35
【问题描述】:

我有一个 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,

我不确定这是否是因为列表中的空引用被填充并被传递给速度模板。

任何解决此问题的指针将不胜感激。

谢谢

【问题讨论】:

  • 您确定这不是由其他地方引起的吗?你能输出循环每次迭代的所有中间结果吗?另外,输出中的括号在哪里?

标签: java foreach velocity


【解决方案1】:

使用速度工具来执行此操作 例如

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

结果就是nando,bob,don 如果你没有在你得到的 list 方法中包含第二个参数 南多,鲍勃和唐

【讨论】:

    【解决方案2】:

    我做了一个快速检查,这似乎是因为您的 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 指出的那样,我不确定括号来自哪里,不确定这是否是所需的行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 2013-05-14
      • 2012-05-20
      相关资源
      最近更新 更多