【问题标题】:Loop over two conditions in a template in play framework?在播放框架中的模板中循环两个条件?
【发布时间】:2012-06-18 16:26:12
【问题描述】:

在 playframework 的视图模板中这样做的方式是什么?我已经用 groovy 进行了标记,因为显然,play 模板引擎是基于 groovy 的。

%{ 
    for(int i=0, int j = 0; i < userdata.size(), j < user.size();i = i + 4, j++){
}%
<div style="text-align: center;">
<h3>
    ${foo.get(j)}
</h3>
</div>

如果这是不可能的,或者只是出于好奇:

我还尝试将 foo 作为 hashmap 传递,其键已经存在于 userdata 中。我尝试了类似的方法但无济于事:

${foo.each{ k, v -&gt; println "${k}:${v}" }}

【问题讨论】:

  • 我不是 100% 确定你想做什么;目标是什么?什么不起作用?
  • 我有一个作为两个查询结果填充的表。第一个列表即userdata 填充名称和ID 等内容。第二个列表,即可能小于userdatafoo 是一个数字列表。现在我需要在我的视图中显示这两个列表。所以,我尝试在 for 循环中使用两个条件,但 play 对此不太满意。所以我需要一种在一个循环中迭代两个列表的方法。我不能使用来自 userdata 的变量,因为我的索引超出了范围。而且列表没有用,因为我已经有了一个表结构和循环。

标签: groovy playframework template-engine


【解决方案1】:

既然您在谈论 groovy,我假设您使用的是 playframework 1.x。 Playframework 2 使用 scala 模板。

您可以循环两个条件,就像使用任何其他语言一样。语法有点不同。

Java:

for (int i = 0; i < 10; i++){
    for (int j = 0; j < 10; j++) {
        System.out.println(String.format("i: %d, j: %d", i, j));
    }
}

playframework 模板:

#{list items:0..10, as:'i'}
    #{list items:0..10, as:'j'}
        <p>i: ${i}, j: ${j}</p>
    #{/list}
#{/list}

查看documentation for the #{list} tag

【讨论】:

  • 是的,我使用的是 1.2.4。发帖前看了list标签,没找到想要的结果。
【解决方案2】:

很明显,您无法使用 play template 内置标签来做到这一点。此外,我在 play 1.2.4 模板中使用带有多参数初始化的 for 循环也出现编译失败。您可以使用 while 循环使其工作:

%{
    int j = 0, i = 0;
    while (i*i <= j) {
}%
        ${i}^2 <= ${j}
%{
        i++;
        j = j+2;
    }
}%
//prints
//0^2 <= 0
//1^2 <= 2
//2^2 <= 4

【讨论】:

    猜你喜欢
    • 2014-07-23
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2014-09-19
    • 2019-02-07
    相关资源
    最近更新 更多