JSTL, Bohnen, und Methodenaufrufe
Frage
Ich arbeite an einer JSP, wo ich Methoden auf dem Objekt aufrufen müssen, die von einem Bean kommen. Die vorherige Version der Webseite nicht JSTL und es funktioniert einwandfrei. Meine neue Version hat wie diese eine ein:
<jsp:useBean id="pageBean" scope="request" type="com.epicentric.page.website.PageBean" />
<c:set var="pageDividers" value="<%= pageBean.getPageDividers() %>" />
<c:set var="numColumns" value="${pageDividers.size()}" />
Die Variable pageDividers
ist ein List
Objekt.
Ich bin der Begegnung dieses Problem: wenn ich für pageDivider
Größe fragen, wird eine Ausnahme ausgelöst. Ich weiß, dass dies ein einfacher JTSL Fehler ist - was mache ich falsch
Die Fehlermeldung lautet:
Die Funktion Größe muss mit einem Präfix verwendet werden, wenn eine Standard-Namespace nicht angegeben
Wie greife oder rufen ich richtig die Methoden meines pageDividers
Objekt?
Lösung
Wenn Sie den Punktoperator für den Zugriff auf Eigenschaften in JSTL verwenden, ${pageDividers.size}
(kein () erforderlich) führt zu einem Aufruf einer Methode namens getSize()
.
Da java.util.List eine Methode namens size()
(statt getSize()
) bietet werden Sie nicht in der Lage sein, die Liste Länge zuzugreifen, indem Sie diesen Code verwenden.
Um auf eine Liste Größe zuzugreifen, bietet JSTL die fn: Länge Funktion, verwendet wie
${fn:length(pageDividers)}
Beachten Sie, dass, um die fn Namespace zu verwenden, sollten Sie es wie folgt deklarieren
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
Darüber hinaus kann die gleiche Funktion mit jedem Kollektionstyp verwendet werden und mit Strings zu.
Andere Tipps
Um die Eigenschaft einer Bean zuzugreifen, die EL Sie einfach den Namen der Eigenschaft (nicht die Methode aufrufen). So kann sagen, Sie haben eine Methode namens getSize () in der Bohne dann
${pageDividers.size}
Beachten Sie nein ().
EDIT:. Sorry ... gemacht ein Fehler in der ursprünglichen Post