Tomcat 6.0 erlaubt die generische ArrayList nicht für UseBean
-
19-09-2019 - |
Frage
In einer JSP -Datei habe ich diese Erklärung:
<jsp:useBean scope="request" id="products" class="java.util.ArrayList<sgt.supermarket.entity.Product>"/>
Diese Deklaration funktioniert einwandfrei mit Glassfish 2.1. Wenn ich jedoch zu Tomcat 6.0 wechsle, werden Ausnahmen geworfen:
Der Wert für das Attribut "UseBean Class" Java.util.ArrayList ist ungültig.
Gibt es eine Bibliothek für Tomcat, die sich von Glass Fish 2.1 unterscheidet?
Lösung
El ist sich der parametrisierten Typen nicht bewusst, daher ist dies nicht erforderlich. In JSP/EL gibt es absolut keine Kompilierungszeitprüfungen. El basiert mehr auf Reflexion. Ich bin jedoch ein bisschen überrascht, dass es in Glassfish "funktioniert", da es in der JSP/EL -Spezifikation nicht angegeben ist.
Abgesehen von allem die jsp:useBean
ist in einer anständigen MVC -Anwendung ziemlich überflüssig, bei der a Servlet
wird verwendet, um die Anfragen zu kontrollieren und vorzuproben.
List<Product> procucts = productDAO.list();
request.setAttribute("products", products);
request.getRequestDispatcher("products.jsp").forward(request, response);
Das products
ist jetzt nur in El von zugänglich von ${products}
. Keine Notwendigkeit eines jsp:useBean
.
Andere Tipps
Wenn Sie sich mit Legacy-Code zu beschäftigen und einfach nur all diese JSP-Warnungen im rohen Typ loswerden möchten, möchten Sie möglicherweise Ihre Linie durch diese ersetzen:
<% request.setAttribute("products",
new java.util.ArrayList<sgt.supermarket.entity.Product>()); %>
Aber Balusc ist immer noch richtig: Wenn Sie das klassische MVC -Muster verwenden, ist es besser, diese Produktliste im Controller und nicht in der Ansicht zu erstellen. Und wenn Sie ein Ansichtsmuster verwenden, schlage ich vor, ein eigenes JSP-Tag zu schreiben, das diese Produktliste in sauberem Java-Code erstellt und füllt.