Tomcat 6.0 не позволяет использовать универсальный ArrayList для useBean

В файле JSP у меня есть это объявление:

<jsp:useBean scope="request" id="products" class="java.util.ArrayList<sgt.supermarket.entity.Product>"/>

Это объявление отлично работает со GlassFish 2.1, однако, когда я переключаюсь на Tomcat 6.0, генерируются исключения:

Значение атрибута класса useBean java.util.ArrayList недопустимо.

Есть ли какая-то библиотека для Tomcat, которая отличает его от Glass Fish 2.1?

2 ответа

Решение

EL не знает о параметризованных типах, поэтому в этом нет необходимости. В JSP/EL нет абсолютно никаких проверок во время компиляции. EL больше основан на рефлексии. Я, однако, немного удивлен, что это "работает" в Glassfish, поскольку это не указано в спецификации JSP/EL.

Помимо всего этого, jsp:useBean довольно излишним в приличном приложении MVC, где Servlet используется для контроля и предварительной обработки запросов.

List<Product> procucts = productDAO.list();
request.setAttribute("products", products);
request.getRequestDispatcher("products.jsp").forward(request, response);

products теперь только доступен в EL ${products}, Нет необходимости jsp:useBean,

Если вы имеете дело с унаследованным кодом и просто хотите избавиться от всех этих предупреждений JSP необработанного типа, то вы можете заменить свою строку на следующую:

<% request.setAttribute("products", 
       new java.util.ArrayList<sgt.supermarket.entity.Product>()); %>

Но BalusC по-прежнему прав: при использовании классического шаблона MVC лучше создать этот список продуктов в контроллере, а не в представлении. И если вы используете шаблон "сначала просмотр", то я предлагаю написать свой собственный тег JSP, который создает и заполняет этот список продуктов в чистом коде Java.

Другие вопросы по тегам