Tomcat 6.0 не позволяет использовать Generic ArrayList для использования для использования

StackOverflow https://stackoverflow.com/questions/1906123

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top