Estoy usando etiquetas JSP para encapsular la lógica de front-end reutilizable.Pasar una lista genérica a una etiqueta JSP
Puedo pasar con éxito un objeto complejo com.example.Product
a una etiqueta, pero tengo problemas para pasar una List<Product>
a una etiqueta.
Aquí es mi product.tag
:
<%@ attribute name="product" required="true" type="com.example.Product" %>
<a href="/products/${product.id}/${product.slug}">${product.name}</a>
puedo usar esto en una página JSP, así:
<%@ taglib tagdir="/WEB-INF/tags" prefix="h" %>
<h:product product="${myProduct}"/>
Ahora, me gustaría crear una etiqueta para mostrar una lista de los productos. Estoy atascado en la forma de describir el tipo de atributo en la declaración:
<%@ 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>
He intentado lo siguiente:
List<com.example.Product>
java.util.List<com.example.Product>
tanto el rendimiento como la siguiente error: Unknown attribute type (java.util.List<com.example.Product>) for attribute products
I ' Estoy seguro de que hay solo una sintaxis sobre cómo describir un tipo genérico en la directiva de atributos, pero no puedo encontrar ningún ejemplo.
Los genéricos de Java no existen en el tiempo de ejecución. El 'type =" java.util.List "' debería funcionar. ¿Cómo exactamente falla? Tenga en cuenta que su ejemplo de archivo de etiqueta falta 'c' taglib, que puede estar presente en su código real, pero es una pista falsa en su fragmento. – BalusC
@BalusC Agregué el c taglib, que había eliminado de mi código para tratar de mantener las cosas simples. Pero tienes razón, lo mejor es evitar las pistas falsas. Escribir más información sobre la salida ahora ... – Portman
Bien. ¿Cómo falla exactamente 'type =" java.util.List "'? Deberia de funcionar. A menos que '$ {products}' no sea una instancia de 'java.util.List' por supuesto. Intente eliminar el atributo '<% @ attribute%>' o configúrelo en 'type =" java.lang.Object "' y luego imprima '$ {products}' y '$ {products ['class']. Name}' just para ver lo que dice – BalusC