Tomcat 6.0 не позволяет использовать Generic ArrayList для использования для использования
-
19-09-2019 - |
Вопрос
В файле 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, которая отличает ее от стеклянной рыбы 2.1?
Решение
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.