O TomCat 6.0 não permite que o Arraylist genérico seja usado para o UseBean
-
19-09-2019 - |
Pergunta
Em um arquivo JSP, tenho esta declaração:
<jsp:useBean scope="request" id="products" class="java.util.ArrayList<sgt.supermarket.entity.Product>"/>
Esta declaração funciona bem com o Glassfish 2.1, no entanto, quando eu mudo para o Tomcat 6.0, exceções é lançada:
O valor do atributo de classe useBean java.util.arraylist é inválido.
Há alguma biblioteca perdida para o Tomcat que o torna diferente do Glass Fish 2.1?
Solução
El não está ciente dos tipos parametrizados, portanto, não há necessidade de fazê -lo. No JSP/EL, não há absolutamente nenhum cheques de tempo de compilação sobre isso. El é mais baseado na reflexão. No entanto, estou um pouco surpreso que "funcione" no Glassfish, pois não é especificado no JSP/EL Specifciation.
Além de tudo isso, o jsp:useBean
é bastante supérfluo em um aplicativo decente de MVC em que um Servlet
é usado para controlar e pré -processar as solicitações.
List<Product> procucts = productDAO.list();
request.setAttribute("products", products);
request.getRequestDispatcher("products.jsp").forward(request, response);
o products
agora está acessível em El por ${products}
. Não há necessidade de um jsp:useBean
.
Outras dicas
Se você está lidando com o código herdado e simplesmente deseja se livrar de todos esses avisos JSP do tipo cru, então convém substituir sua linha por esta:
<% request.setAttribute("products",
new java.util.ArrayList<sgt.supermarket.entity.Product>()); %>
Mas o Balusc ainda está certo: quando você usa o padrão MVC clássico, é melhor criar esta lista de produtos no controlador e não na visualização. E se você estiver usando um padrão de visualização, sugiro escrever sua própria tag JSP, que cria e preencha esta lista de produtos no código Java Clean.