2012-03-26 13 views
13

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 '属性ディレクティブにジェネリック型を記述するための構文がいくつかありますが、例は見つかりません。

+2

Java Genericsは実行時に存在しません。 'type =" java.util.List "は動作するはずです。それはどのくらい正確に失敗するのですか?あなたのタグファイルの例は、あなたの実際のコードに存在するかもしれない 'c' taglibが欠落していますが、あなたのスニペットには赤いニシンです。 – BalusC

+0

@BalusC私はコードから削除したc taglibを追加して、物事を単純にしようとしました。しかし、赤ちゃんを避けるのが一番です。出力の詳細を今書いています... – Portman

+2

いいえ。 'type =" java.util.List "はどのくらい正確に失敗するのですか?それは動作するはずです。 '$ {products}'が 'java.util.List'のインスタンスではない限り、もちろんです。 '<%@ attribute%>'を削除するか、 'type =" java.lang.Object "'に設定して '$ {products}'と '$ {products ['class']。それが何を言っているかを見る。 – BalusC

答えて

18

ジェネリックタイプを指定する必要はありません。 type="java.util.List"が動作する必要があります。あなたの具体的な問題は他の場所で引き起こされます。

1

私は同じ問題を抱えていましたが、実際のオブジェクトではなくStringを送信していたことに気付きました。 多分あなたは同じ間違いだったでしょうか? :)

+0

質問のコメントを読む。 – BalusC

関連する問題