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.