Tomcat 6.0 non consentono ArrayList generici da utilizzare per useBean
-
19-09-2019 - |
Domanda
In un file jsp ho questa dichiarazione:
<jsp:useBean scope="request" id="products" class="java.util.ArrayList<sgt.supermarket.entity.Product>"/>
Questa dichiarazione funziona bene con GlassFish 2.1, tuttavia, quando passo per Tomcat 6.0, eccezioni è gettato:
Il valore per la classe useBean attributo java.util.ArrayList non è valido.
C'è qualche libreria di perdere per Tomcat che lo rende diverso da comportarsi Pesce vetro 2,1?
Soluzione
EL non è a conoscenza dei tipi parametrizzati, quindi non c'è bisogno di farlo. In JSP / EL non ci sono assolutamente i controlli in fase di compilazione su questo. EL è più basato sulla riflessione. Sono però un po 'sorpreso che "funziona" in Glassfish in quanto non è specificato in JSP / EL specifciation.
Oltre tutto, la jsp:useBean
è abbastanza superflua in un'applicazione MVC discreto in cui una Servlet
è stato utilizzato per controllare e pre-elaborare le richieste.
List<Product> procucts = productDAO.list();
request.setAttribute("products", products);
request.getRequestDispatcher("products.jsp").forward(request, response);
Il products
ora è solo accessibile in EL per ${products}
. Non c'è bisogno di un jsp:useBean
.
Altri suggerimenti
Se avete a che fare con il codice legacy e semplicemente vuole sbarazzarsi di tutte quelle prime tipo JSP avvertimenti quindi si consiglia di sostituire la linea con questo:
<% request.setAttribute("products",
new java.util.ArrayList<sgt.supermarket.entity.Product>()); %>
Ma BalusC è ancora quello giusto: quando si utilizza il classico pattern MVC, allora è meglio per creare questa lista dei prodotti nel controller e non nella vista. E se si utilizza un modello vista-prima allora vi consiglio di scrivere il proprio Tag JSP che crea e riempie questo elenco dei prodotti in un ambiente pulito del codice Java.