【问题标题】:What is the best way to access an array inside Velocity?在 Velocity 中访问数组的最佳方式是什么?
【发布时间】:2019-01-26 08:15:13
【问题描述】:

我有一个 Java 数组,例如:

String[] arr = new String[] {"123","doc","projectReport.doc"};

在我看来,自然的访问方式是:

 #set($att_id = $arr[0])
 #set($att_type = $arr[1])
 #set($att_name = $arr[2])

但它不起作用。我有这个解决方法。但是对于这样一个简单的任务来说,它的代码太多了。

#set($counter = 0)
#foreach($el in $arr)
    #if($counter==0)
        #set($att_id = $el)
    #elseif($counter==1)
        #set($att_type = $el)
    #elseif($counter==2)
         #set($att_name = $el)
    #end
    #set($counter = $counter + 1)
#end

还有其他方法吗?

【问题讨论】:

    标签: velocity


    【解决方案1】:

    您可以使用 Velocity 1.6: 对于名为 $array 的数组,只需使用 $array.get($index)

    在即将到来的 Velocity 1.7 中,人们将能够做到 $array[$index](以及 $list[$index]$map[$key])。

    【讨论】:

      【解决方案2】:

      您可以使用Arrays.asList(T... a) 将数组包装在List 中。新的 List 对象由原始数组支持,因此它不会浪费地分配副本。甚至对新 List 所做的更改也会传播回数组。

      然后您可以使用$list.get(int index) 在 Velocity 中取出您的对象。

      如果只需要从数组中获取一两个对象,也可以使用Array.get(Object array, int index) 从数组中获取项目。

      【讨论】:

        【解决方案3】:
        String[] arr = new String[] {"123", "doc", "projectReport.doc"}; 
        

        在我看来,自然的访问方式是:

         #set($att_id = $arr[0]) 
         #set($att_type = $arr[1]) 
         #set($att_name = $arr[2]) 
        

        可以通过使用$array.get("arr", 1) 来获取此值,因为没有直接的方法可以从速度中的$att_id = $arr[0] 之类的数组中获取值。
        希望它有效:)

        【讨论】:

          【解决方案4】:

          速度 1.6

          $myarray.isEmpty()
          $myarray.size()
          $myarray.get(2)
          $myarray.set(1, 'test')
          

          http://velocity.apache.org/engine/1.7/user-guide.html

          【讨论】:

            【解决方案5】:

            有一个隐式计数器 $velocityCount 以值 1 开头,因此您不必创建自己的计数器。

            【讨论】:

              【解决方案6】:

              Brian's answer 确实是正确的,尽管您可能想知道即将推出的 Velocity 1.6 直接支持数组;请参阅Velocity documentation 了解更多信息。

              【讨论】:

              • 这是真的。在 1.6-beta1 及更高版本中,您可以在数组对象上调用大多数 ArrayList 方法。例如$array.get(0) $array.set(0, 'foo')
              【解决方案7】:

              我最终使用了velocity-tools.jar 中的ListTool。它具有访问数组元素并获取其大小的方法。

              【讨论】:

                【解决方案8】:

                我有同样的问题,它在另一个线程得到了回答

                #set ( $Page = $additionalParams.get('Page') )
                #set ( $Pages = [] )
                #if ( $Page != $null && $Page != "" )
                    #foreach($i in $Page.split(";"))
                        $Pages.add($i)
                    #end
                #end
                

                Array indexing in Confluence / Velocity templates

                【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-03-15
                • 2017-03-09
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多