Tomcat 6.0 не позволяет использовать универсальный ArrayList для useBean - PullRequest
3 голосов
/ 15 декабря 2009

В файле 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 ]

5 голосов
/ 15 декабря 2009

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.

0 голосов
/ 12 февраля 2013

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

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

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

...