速度和$foreach.count

25

我正在使用velocity 1.7,在foreach循环中我想要打印计数器。在模板中,我有以下字符串在#foreach/#end部分:

Count: $foreach.count

我期望在渲染出的结果中看到类似于以下内容:

Count: 1
...
Count: 2
...

但是我看到的只有:

Count: $foreach.count
...
Count: $foreach.count
...

我做错了什么?有什么想法吗?


请您添加完整的foreach语句。 - AlikElzin-kilaka
9个回答

33

对我来说,$foreach.count$counter都没有起作用。

这个答案建议使用$velocityCount,对我起了作用。


这对我也起作用了。我们正在使用Velocity 1.5,由于使用第三方框架,我们无法升级到1.7。 - Sariq Shaikh

16

您的代码是不完整的,我们没有看到foreach指令。

另外,我知道foreach循环有一个内置变量称为$counter,尽管在指南中他们提到了$foreach.count


5
在Velocity版本低于1.7时,可以在初始化引擎的属性中使用“directive.foreach.counter.name = velocityCount”来配置计数器变量的名称(这是默认版本的方法)。现在看起来他们已经删除了更改该名称的能力,并将其具体命名为${foreach.counter}。 - Dave G
我习惯使用正式的符号表示法… 有点啰嗦,但大部分情况下表达清晰。 - Dave G
1
我正在使用Velocity引擎2.1,${foreach.count}可以正常工作。 - kscoder

12

我试过使用 $counter$foreach.count,但这两个都不起作用。

然而,$velocityCount 标签可以生效,以下是示例代码。

输入代码:

#foreach($entry in $entries)    
    <p>In for Loop count is : $velocityCount</p>     
#end    

输出:

In for Loop count is : 1

In for Loop count is : 2

In for Loop count is : 3

7

k.honsalis 的答案已经过时。

现在你只能使用 $velocityCount,尽管文档会提到已弃用的方法。

#foreach($item in $items)
counter 0: $foreach.index
counter 1: $foreach.count
counter 2: $counter
counter 3: $velocityCount
#end

Output:

$foreach.index
$foreach.count
$counter
1

这个答案更有意义。谢谢! - ewaolx

7

我不知道为什么内置的 foreach 循环变量 $count 不像引用中说的那样起作用,但 $velocityCount 对我有效。

在 velocity.properties 文件中有一个叫做 directive.foreach.counter.name 的属性,它的值是 velocityCount,所以默认的 $count 变量可能无法使用。


2

我目前正在格式化我的email_html.vm文件,如下所示。

请注意,我正在使用

#set( $count = 1 )#set( $count = $count + 1 )

<html>
<body>
<table style="border: 1px solid black; border-collapse: collapse">
    #set( $count = 1 )
    #foreach( $film in $filmList )
        <tr>
            <td colspan=2 style="background: bisque; text-align: center"><b>Movie $count</b></td>
        </tr>
        <tr>
            <th style="border: 1px solid black; border-collapse: collapse; padding: 5px; text-align: left">Title</th>
            <td style="border: 1px solid black; border-collapse: collapse; padding: 5px; text-align: left"> $film.getTitle() </td>
        </tr>
        <tr>
            <th style="border: 1px solid black; border-collapse: collapse; padding: 5px; text-align: left">Synopsis</th>
            <td style="border: 1px solid black; border-collapse: collapse; padding: 5px; text-align: left"> $film.getSynopsis() </td>
        </tr>
        <tr>
            <th style="border: 1px solid black; border-collapse: collapse; padding: 5px; text-align: left">Trailer</th>
            <td style="border: 1px solid black; border-collapse: collapse; padding: 5px; text-align: left"> $film.getTrailerLink() </td>
        </tr>
        <tr>
            <th style="border: 1px solid black; border-collapse: collapse; padding: 5px; text-align: left">More Information</th>
            <td style="border: 1px solid black; border-collapse: collapse; padding: 5px; text-align: left">
                https://www.landmarktheatres.com/$film.getMoreInfoLink() </td>
        </tr>
        #set( $count = $count + 1 )
    #end
</table>
</body>
</html>

输出

enter image description here


2
默认变量是velocityCount,但如果您想要,可以更改变量名称和初始值(仅适用于2.0之前的版本)。"Original Answer"翻译成"最初的回答"。
VelocityEngine engine = new VelocityEngine();
engine.setProperty("directive.foreach.counter.name", "velocityCount");
engine.setProperty("directive.foreach.counter.initial.value", 1);

http://people.apache.org/~henning/velocity/htmlsingle/VelocityUsersGuide.html


1

$foreach.count(从1开始)和$foreach.index(从0开始)与Velocity 2.3一起使用可以工作。

文档中提到了更多可用的循环变量。


1

$velocityCount 对我有用,我正在使用 velocity 1.5 $foreach.count$counter


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接