JSPタグを使用して、再利用可能なフロントエンドロジックをカプセル化しています。汎用リストをJSPタグに渡す
複雑なオブジェクトcom.example.Product
をタグに正しく渡すことができますが、List<Product>
をタグに渡す際に問題があります。ここで
は私product.tag
です:
<%@ attribute name="product" required="true" type="com.example.Product" %>
<a href="/products/${product.id}/${product.slug}">${product.name}</a>
私はそうのようなJSPページでこれを使用することができます。
今<%@ taglib tagdir="/WEB-INF/tags" prefix="h" %>
<h:product product="${myProduct}"/>
、私は製品のリストを表示するためのタグを作成したいと思います。私は、属性宣言で型を記述する方法についてこだわっている:
<%@ attribute name="products" required="true" type="???" %>
<%@ taglib tagdir="/WEB-INF/tags" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<ul>
<c:forEach items="${products}" var="product">
<li><h:product product="${product}"/></li>
</c:forEach>
</ul>
私は次のことを試してみた:
List<com.example.Product>
java.util.List<com.example.Product>
どちらも、次が得られますエラー:Unknown attribute type (java.util.List<com.example.Product>) for attribute products
I '属性ディレクティブにジェネリック型を記述するための構文がいくつかありますが、例は見つかりません。
Java Genericsは実行時に存在しません。 'type =" java.util.List "は動作するはずです。それはどのくらい正確に失敗するのですか?あなたのタグファイルの例は、あなたの実際のコードに存在するかもしれない 'c' taglibが欠落していますが、あなたのスニペットには赤いニシンです。 – BalusC
@BalusC私はコードから削除したc taglibを追加して、物事を単純にしようとしました。しかし、赤ちゃんを避けるのが一番です。出力の詳細を今書いています... – Portman
いいえ。 'type =" java.util.List "はどのくらい正確に失敗するのですか?それは動作するはずです。 '$ {products}'が 'java.util.List'のインスタンスではない限り、もちろんです。 '<%@ attribute%>'を削除するか、 'type =" java.lang.Object "'に設定して '$ {products}'と '$ {products ['class']。それが何を言っているかを見る。 – BalusC