Ich erstelle ein einfaches Gästebuch in JSP, um diese Technologie zu lernen. Momentan habe ich zwei Klassen: guestbook / GuestBook.class und guestbook / Entry.class (Ich habe die App noch nicht fertiggestellt, daher habe ich nur diese Klassen), die in WEB-INF / libs / hinzugefügt werden und sie sind korrekt eingebunden . In meiner Datei index.jsp verwende ich guestbook.GuestBook Klasse; seine Methode gibt Vector zurück. Wenn ich über Einträge iteriere und ich möchte einen Autor des Eintrags drucken, kann ich sehen:
%Vor%Ich muss hinzufügen, dass die Entry-Klasse public ist und das author-Attribut folgendermaßen deklariert ist:
%Vor%Also ist es auch öffentlich. Dies ist mein Code, wenn ich über die Einträge iteriere:
%Vor%und
%Vor%gibt guestbook.Entry
zurückDie Klassen sind im Paket Gästebuch (wie Sie erraten können), Einträge Vektor wird an pageContext übergeben.
Ich weiß nicht, was mit meiner Vorgehensweise falsch ist. Kann mir bitte jemand dabei helfen? (Danke im Voraus!)
JSP EL erkennt keine öffentlichen Felder in Ihren Klassen, es funktioniert nur mit Getter-Methoden (was auch immer gut ist - stellen Sie niemals den Zustand Ihrer Klassen als öffentliche Felder dar).
Also benutze
%Vor%statt
%Vor%Als Nebenbemerkung ist Ihre JSTL zu kompliziert, sie kann folgendermaßen vereinfacht werden:
%Vor%oder sogar
%Vor%Obwohl die letztere Form nicht den Namen des Autors entkamen wird, ist das nicht ratsam.
Schließlich ist die Vector
-Klasse veraltet, stattdessen sollten Sie ArrayList
verwenden.
Sie können den EL-Resolver auch so ändern, dass er auf öffentliche Felder zugreift, wenn ein Getter nicht gefunden wird. Dazu müssen Sie zuerst Ihren speziellen ELResolver erstellen:
%Vor%Dann brauchen Sie eine Klasse, die Ihnen bei der Konfiguration hilft:
%Vor%Endlich müssen Sie diese Konfigurator-Klasse beim Start des Servlets ausführen. Tun Sie dies, indem Sie diese Klasse als Servlet-Listener in Ihrer web.xml hinzufügen:
%Vor%Jetzt können Sie auf öffentliche Felder in Ihren JSPs verweisen.