Wie bekomme ich die Länge von an ArrayList
Verwenden Sie einen JSF-EL-Ausdruck?
#{MyBean.somelist.length}
funktioniert nicht.
GBa
Wie bekomme ich die Länge von an ArrayList
Verwenden Sie einen JSF-EL-Ausdruck?
#{MyBean.somelist.length}
funktioniert nicht.
billjamesdev
Ja, da einige Genies im Java-API-Erstellungskomitee dies entschieden haben, obwohl bestimmte Klassen dies getan haben size()
Mitglieder bzw length
Attribute, sie werden nicht implementiert getSize()
oder getLength()
die JSF und die meisten anderen Standards erfordern, können Sie nicht tun, was Sie wollen.
Es gibt ein paar Möglichkeiten, dies zu tun.
Erstens: Fügen Sie Ihrem Bean eine Funktion hinzu, die die Länge zurückgibt:
In class MyBean: public int getSomelistLength() { return this.somelist.length; } In your JSF page: #{MyBean.somelistLength}
Zweitens: Wenn Sie Facelets verwenden (Oh Gott, warum verwenden Sie Facelets nicht!), können Sie den fn-Namespace hinzufügen und die length-Funktion verwenden
In JSF page: #{ fn:length(MyBean.somelist) }
fn ist wahrscheinlich der richtige Weg, leider ist es nur in JSTL-Versionen größer als 1.1 verfügbar.
– James McMahon
27. Januar 2010 um 13:36 Uhr
Die Verwendung von fn:length funktionierte für mich mit nacktem JSP (kein JSF, Facelets; Ultra-Legacy-Projekt, das vor dem Auslaufen leicht aktualisiert wird). Die richtige zu verwendende Taglib: <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
– Christoph Parker
17. Februar 2010 um 20:01 Uhr
Für Leute, die hier wie ich landen, immer noch 2 Jahre später, sollten Sie in Betracht ziehen, dass Sie Ihrem Facelet den folgenden Namensraum hinzufügen: xmlns:fn="http://java.sun.com/jsp/jstl/functions"
– Damien MIRAS
15. Juli 2011 um 8:47 Uhr
Damo
Du meinst size() oder?
#{MyBean.somelist.size()}
funktioniert für mich (mit JBoss Seam, das die Jboss EL-Erweiterungen hat)
Vielleicht unterstützen die neueren Spezifikationen der EL die Größenmethode? Kann das jemand bestätigen oder dementieren?
– James McMahon
1. September 2009 um 11:29 Uhr
@nemo – dies wird in einer JSR245-Wartungsversion behandelt: blogs.sun.com/kchung/entry/jsr_245_mr_part_i (In Bezug auf die JEE-Spezifikationen ist das JEE6)
– McDowell
1. September 2009 um 11:46 Uhr
@McDowell, danke für die Info, ich bin wirklich überrascht, dass sie so lange gebraucht haben, um das Problem zu beheben.
– James McMahon
1. September 2009 um 12:11 Uhr
Vielen Dank. Bei mir hat es auch funktioniert. +1. Aber bis JEE 6 weitgehend unterstützt wird, werde ich wahrscheinlich bei der “eher standardmäßigen” JSTL-Funktion bleiben.
– Hosam Ali
2. September 2009 um 5:08 Uhr
Übrigens funktioniert es wahrscheinlich in JBoss, um nur zu sagen #{MyBean.somelist.size}
(ohne die Klammer am Ende).
– Hosam Ali
8. September 2009 um 10:04 Uhr
James McMahon
Notiz: Diese Lösung ist besser für ältere Versionen von JSTL. Für Versionen größer als 1.1 empfehle ich die Verwendung von fn:length(MyBean.somelist)
wie von Bill James vorgeschlagen.
Dieser Artikel hat einige detailliertere Informationen, einschließlich einer anderen möglichen Lösung;
Das Problem ist, dass wir versuchen, die Größenmethode der Liste aufzurufen (die eine gültige LinkedList-Methode ist), aber es ist keine JavaBeans-kompatible Getter-Methode, sodass der Ausdruck list.size-1 nicht ausgewertet werden kann.
Es gibt zwei Möglichkeiten, diesem Dilemma zu begegnen. Zunächst können Sie die RT Core-Bibliothek wie folgt verwenden:
<c_rt:out value="<%= list[list.size()-1] %>"/>
Zweitens können Sie, wenn Sie Java-Code in Ihren JSP-Seiten vermeiden möchten, eine einfache Wrapper-Klasse implementieren, die eine Liste enthält und mit einer JavaBeans-kompatiblen Getter-Methode Zugriff auf die Größeneigenschaft der Liste bietet. Diese Bean ist in Listing 2.25 aufgeführt.
Das Problem mit der c_rt-Methode besteht darin, dass Sie die Variable manuell aus der Anfrage abrufen müssen, da sie sonst nicht erkannt wird. An diesem Punkt fügen Sie eine Menge Code für die Funktionen ein, die eingebaut werden sollen. Das ist ein RIESE Fehler in der EL.
Am Ende habe ich die Methode “wrapper” verwendet, hier ist die Klasse dafür;
public class CollectionWrapper {
Collection collection;
public CollectionWrapper(Collection collection) {
this.collection = collection;
}
public Collection getCollection() {
return collection;
}
public int getSize() {
return collection.size();
}
}
Eine dritte Option, die noch niemand erwähnt hat, besteht darin, Ihre Listengröße als separates Attribut in das Modell aufzunehmen (vorausgesetzt, Sie verwenden MVC). In Ihrem Modell hätten Sie also “someList” und dann “someListSize”. Dies ist möglicherweise der einfachste Weg, um dieses Problem zu lösen.
auch stackoverflow.com/questions/1332169/…
– baybora.oren
9. Januar 2012 um 22:09 Uhr
UdayKiran Pulipati
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<h:outputText value="Table Size = #{fn:length(SystemBean.list)}"/>
Auf dem Bildschirm wird die Tabellengröße angezeigt
Beispiel: Table Size = 5
Arry
Nach 7 Jahren … funktioniert die Facelets-Lösung für mich als jsf-Benutzer immer noch einwandfrei
schließen Sie den Namensraum als ein
xmlns:fn="http://java.sun.com/jsp/jstl/functions"
und benutze die EL als
#{fn:length(myBean.someList)}
zum Beispiel, wenn die Verwendung in jsf ui:fragment unten Beispiel funktioniert gut
<ui:fragment rendered="#{fn:length(myBean.someList) gt 0}">
<!-- Do something here-->
</ui:fragment>
Romain Linsolas
Sie können die EL-Sprache schließlich erweitern, indem Sie die verwenden EL-Funktormit dem Sie beliebige Java-Beans-Methoden aufrufen können, sogar mit Parametern …
Soujanya
Die Länge erhalten Sie mit folgendem EL:
#{Bean.list.size()}
Dies ist im Wesentlichen die gleiche Antwort wie die von Damo.
– Artjom B.
29. Juli 2014 um 19:47 Uhr
Als @ArtjomB. schlägt vor, dass es hier im Allgemeinen nicht gut ist, etwas zu posten, das auf die gleiche Antwort hinausläuft wie jemand anderes, der bereits gepostet hat. In diesem Fall fast vor sechs Jahren.
– Andreas Friseur
29. Juli 2014 um 19:52 Uhr
Verwandte: Wie zeigt man den Wert von List#size() in JSF EL an?
– BalusC
23. August 2011 um 15:25 Uhr
@GBa Sie können #{MyBean.somelist.size()} verwenden, um die Größe der Liste anzuzeigen.
– Umair
6. August 2014 um 5:45 Uhr
Sie könnten auch c:forEach verwenden, um die Liste zu durchlaufen und im Schleifenkörper den Zählwert einer Variablen zuweisen, wie:. Nützlich, besonders wenn Sie die Liste sowieso durchlaufen.
– David Balažic
6. Januar 2015 um 13:18 Uhr