在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>
但这非常难看 - 肯定有一种更好的办法可以做一些如此简单的事情吗?
答案 0 :(得分:5)
这可以通过循环和tapestry的范围运算符
来完成Santa Claus said: <t:loop t:source="1..3">Ho</t:loop>
答案 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>