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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top