在tapestry模板中循环一定次数

时间:2012-12-27 00:40:17

标签: tapestry

在Tapestry组件模板中,有一种简单的方法可以渲染一些标记X次,其中X是组件的参数吗?

我在Tapestry文档中找到的就是Loop组件:

<table class="navigation" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
    <tr>
        <t:loop source="pageNames" value="pageName">
            <td class="${tabClass}">
                <t:pagelink page="pageName">${pageName}</t:pagelink>
            </td>
        </t:loop>
    </tr>
</table>

但是,如果我只想渲染X次,而不需要传递任何参数,那就太过分了。对于这个用例,我真的希望像(伪代码):

<table class="navigation" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
    <tr>
        <t:loop times="${x}">
            <!-- same markup every time -->
        </t:loop>
    </tr>
</table>

但似乎没有这样的东西存在 - 或者是吗?

现在我的解决方法是提供List的存根实现,它给出了X的大小,并将其用作我的循环源:

类别:

private int x;

public List<Object> getX() {
    return new AbstractList<Object>() {
        public Object get(int arg0) {
            return null;
        }
        public int size() {
            return x;
        }
    };
}

模板:

<t:loop source="x">
    <!-- same markup each time -->
</t:loop>

但这非常难看 - 肯定有一种更好的办法可以做一些如此简单的事情吗?

2 个答案:

答案 0 :(得分:5)

这可以通过循环和tapestry的范围运算符

来完成
Santa Claus said: <t:loop t:source="1..3">Ho</t:loop>

http://tapestry.apache.org/property-expressions.html

答案 1 :(得分:1)

在我的世界中,重复模板中的静态内容并不常见。如果它在你的,那么编写你自己的组件是有序的。

这是我的解决方案:https://gist.github.com/4402251

将其放入您的组件包并使用它:

 <t:repeat times="100">.</t:repeat>
 <t:repeat times="5" element="p">
     This is repeated 5 times...
 </t:repeat>

 <ul>
     <li t:type="repeat" times="3">Repeated 3 times</li>
 </ul>