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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top