1

Tapestry コンポーネント テンプレートで、マークアップを X 回 (X はコンポーネントのパラメーター) レンダリングする簡単な方法はありますか?

Tapestry のドキュメントで見つけることができるのは、ループ コンポーネントだけです。

<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 に答える