2012-03-26 2 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

' 속성 지시문에 제네릭 형식을 설명하는 방법에 대한 구문이 있지만 해당 예제를 찾을 수 없습니다.

+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

관련 문제