1

在 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>

但似乎不存在这样的东西——或者是吗?

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

班级:

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>

但这很丑陋——肯定有更好的方法来做这么简单的事情吗?

4

2 回答 2

5

这可以通过循环和挂毯的范围运算符来完成

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

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

于 2013-01-29T16:23:29.707 回答
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>
于 2012-12-28T21:53:49.033 回答