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