5

さまざまなタイプのオブジェクトのリストを jsp で適切にレンダリングするにはどうすればよいでしょうか? たとえば、これらのさまざまなオブジェクトを指定された順序でレンダリングする必要があるとします。

1 つの方法は、共通の型変数または instanceof を使用することですが、それは、それらすべてを管理するために大きな switch/if ステートメントを使用することを意味します。

<c:forEach var="o" items="${bigListofObjects}"  >
    <c:choose>
        <c:when test='${o.type=="simple"}' >
        <!-- render simple -->
        </c:when>
        <c:when test='${o.type=="complex"}' >
        <!-- render complex -->
        </c:when>
        <!-- etc etc ... -->
    </c:choose>
</c:forEach>

各クラスに render() メソッドを追加することもできますが、それはビューを残りのコードと混ぜ合わせることを意味します。

後で別のタイプをレンダリングしたい場合はどうなりますか? カスタム jsp タグでできることはありますか?

4

3 に答える 3

6

特定のタイプに対して正しいレンダリングを行う別の jsp を含めることができます。例えば:

<c:forEach var="o" items="${bigListofObjects}"  >
    <c:import url="render-${o.type}.jsp"/>
</c:forEach>
于 2009-03-29T14:35:49.067 に答える
1

ポリモーフィックな方法で必要な HTML/JSP を発行する、実装する各クラスの共通メソッドを持つインターフェイスを作成できます。私はこの提案にそれほど夢中ではありません。なぜなら、それはユーザー インターフェイスをモデル クラスに悪い方法で漏らしてしまうからです。おそらく別の方法として、UI を発行できる Visitor パターンを使用することもできます。

いずれにせよ、新しいタイプが登場したらコードを追加する必要があります。

カスタム タグ ライブラリを作成するのは気が進まないでしょう。スタイルがそれに漏れて、CSS スキニングが不可能にならないように注意する必要があります。

于 2009-03-29T14:38:48.123 に答える
0

タイプのリストのリストを反復する外側の forEach ループを持つことができます。

<c:forEach var="t" items="${listOfTypes}">
    <c:forEach var="o" items="${bigListofObjects}">
        <if test='${o.type==t}'>
            <!-- render -->
        </c:if>
    </c:forEach>
</c:forEach>
于 2009-03-29T14:38:08.310 に答える