Tomcat 6.0 no permite ArrayList genérico que se utiliza para useBean
-
19-09-2019 - |
Pregunta
En un archivo JSP Tengo esta declaración:
<jsp:useBean scope="request" id="products" class="java.util.ArrayList<sgt.supermarket.entity.Product>"/>
Esta declaración funciona bien con GlassFish 2.1, sin embargo, cuando me cambio a Tomcat 6.0, se lanza excepciones:
El valor de la clase de atributos useBean java.util.ArrayList no es válido.
¿Hay alguna biblioteca perdida para Tomcat que hace que se comporte diferente de Glass Fish 2.1?
Solución
EL no tiene conocimiento de los tipos parametrizados, lo que no hay necesidad de hacerlo. En JSP / EL no hay absolutamente ninguna comprobación en tiempo de compilación en eso. EL es más basado en la reflexión. Sin embargo, estoy un poco sorprendido de que "funciona" en Glassfish, ya que no se especifica en JSP / EL specifciation.
Además de todo esto, el jsp:useBean
es bastante superfluo en una aplicación MVC decente en el que un Servlet
se ha utilizado para controlar y procesar previamente las solicitudes.
List<Product> procucts = productDAO.list();
request.setAttribute("products", products);
request.getRequestDispatcher("products.jsp").forward(request, response);
El products
es ahora sólo accesibles en El por ${products}
. No hay necesidad de un jsp:useBean
.
Otros consejos
Si se trata de código heredado y simplemente quiere deshacerse de todas esas advertencias JSP de tipo cruda entonces es posible que desee reemplazar su línea con éste:
<% request.setAttribute("products",
new java.util.ArrayList<sgt.supermarket.entity.Product>()); %>
Pero BalusC sigue teniendo razón: cuando se utiliza el patrón clásico MVC, entonces es mejor para crear esta lista de productos en el controlador y no en la vista. Y si está utilizando un patrón de vista primero y luego yo sugiero escribir su propia etiqueta JSP que crea y llena esta lista de productos de limpieza del código de Java.