0

要素{a、b、c、d、e、g、h、y、t}を含むstruts2クラスのリストがあります。このリストを次のような表形式で表示したい:

abc

ハイト

つまり、1 行あたり 3 つの要素です。「s:iterator」と「s:property」タグを使用しています。

4

2 に答える 2

0

私のアプローチは、JB の「Java 側で行う」と Jaiwo の「ビューで行う」の中間にあります。

列数を取得し、リストを分割し、列数の偶数倍でない場合は空の要素を追加し、すべてのロジックを素敵な小さなバンドルにまとめるカスタム タグをお勧めします。

ビューレイヤーのみのアプローチでは、Jaiwo のコードのいずれかのバリエーションを使用します。サブセットのアイデアについては、それらをまとまりのあるブロックに分割しますが、それでも二重反復を行います – IMO これははるかに明確です:

<s:set var="items" value="{1,2,3,4,5,6,7,8,9}" />

<s:subset var="list1" source="#items" start="0" count="3" />
<s:subset var="list2" source="#items" start="3" count="3" />
<s:subset var="list3" source="#items" start="6" count="3" />

<s:set var="nested" value="{#attr.list1, #attr.list2, #attr.list3}" />

<table>
  <s:iterator value="#nested">
    <tr>
       <s:iterator>
         <td><s:property /></td>
       </s:iterator>
    </tr>
  </s:iterator>
</table>

リストが列数の偶数倍でない場合、これは崩壊します。(簡単に)項目をサブセットに追加することはできません(リストではなく、イテレータです)。元のリストに項目を追加するのはJSPでは扱いにくいです。

Java レイヤーのみのアプローチの問題は、ビュー レイヤーから列数を設定できるようにしたい場合 (妥当な要求)、列数を Java に取得する必要があることです。OGNL では任意のメソッドを呼び出すことができるため、最終的には、ネストされたリストを作成する小さなユーティリティを実装することになるでしょう。

<s:iterator value="@utils@slice(items, 3)">
  ...

しかし、(a) 見苦しく、(b) メインラインの JSP を乱雑にするため、カスタム タグでそれをまとめます。Rails のパーシャルと同様に、オブジェクトのリストの表示はリファクタリングして、次のものを残す必要があります。

<app:showItems items="..." columns="..." />
于 2012-07-13T16:48:12.677 に答える
0

とても簡単そうです。

<table>
    <tr>
        <s:subset source="{1,2,3,4,5,6,7,8,9}" count="3" start="0">
            <s:iterator>
                <td><s:property /></td>
            </s:iterator>
        </s:subset>
    </tr>
    <tr>
        <s:subset source="{1,2,3,4,5,6,7,8,9}" count="3" start="3">
            <s:iterator>
                <td><s:property /></td>
            </s:iterator>
        </s:subset>
    </tr>
    <tr>
        <s:subset source="{1,2,3,4,5,6,7,8,9}" count="3" start="6">
            <s:iterator>
                <td><s:property /></td>
            </s:iterator>
        </s:subset>
    </tr>
</table>

アップデート

を使用したくない場合subsetは、代替手段があります。

<table>
    <s:iterator value="{1,2,3,4,5,6,7,8,9}" status="status">
        <s:if test="%{#status.index == 0}"><tr><td><s:property /></td></s:if>
            <s:elseif test="%{#status.index%3 == 0}">
            </tr><tr><td><s:property /></td>
            </s:elseif>
            <s:else>
                <td><s:property /></td>
            </s:else>
        </s:iterator>
    </tr>
</table>
于 2012-07-13T10:16:54.350 に答える