Ich muss ein Element ausblenden, wenn bestimmte Werte in der JSP vorhanden sind
Die Werte werden in einer Liste gespeichert, also habe ich versucht:
<c:if test="${ mylist.contains( myValue ) }">style='display:none;'</c:if>
Aber es funktioniert nicht.
Wie kann ich bewerten, ob eine Liste einen Wert in JSTL enthält? Die Liste und die Werte sind Zeichenfolgen.
Antworten:
Leider denke ich, dass JSTL nichts anderes als eine Iteration durch alle Elemente unterstützt, um dies herauszufinden. In der Vergangenheit habe ich die forEach-Methode in der Core-Tag-Bibliothek verwendet:
Nachdem dies ausgeführt wurde, ist $ {enthält} gleich "wahr", wenn myList myValue enthält.
quelle
Es gibt keine integrierte Funktion, um dies zu überprüfen. Sie würden lediglich eine eigene tld-Funktion schreiben, die eine Liste und ein Element verwendet und die Methode includes () der Liste aufruft. z.B
Erstellen Sie dann eine Klasse mit dem Namen Yourclass und fügen Sie eine statische Methode mit dem Namen includes mit der obigen Signatur hinzu. Ich bin sicher, dass die Implementierung dieser Methode ziemlich selbsterklärend ist:
Dann können Sie es in Ihrem jsp verwenden:
Das Tag kann von jeder JSP auf der Site verwendet werden.
edit: mehr info zur tld datei - mehr info hier
quelle
Collection
stattList
in der Taglib zu verwenden - es funktioniert genauso, unterstützt aber mehr Sammlungstypen wieSet
sEine andere Möglichkeit, dies zu tun, ist die Verwendung eines
Map (HashMap)
Paares mit Schlüssel und Wert, das Ihr Objekt darstellt.In JSTL
Dies sollte true zurückgeben, wenn das Paar in der Karte vorhanden ist
quelle
test="${isPresentByValue[myValue]}"
.Sie müssen die Funktion
fn:contains()
oderfn:containsIgnoreCase()
verwenden....
oder
Hinweis: Dies funktioniert wie folgt.
mylist.toString().contains("apple")
Wenn dies nicht der Fall ist, verwenden Sie einen anderen Ansatz.quelle
mylist.toString().contains("apple")
es absolut nicht das ist, was Sie anfänglich erwarten würden.Das Folgende ist eher eine Problemumgehung als eine Antwort auf Ihre Frage, aber möglicherweise ist es das, wonach Sie suchen. Wenn Sie Ihre Werte in eine Karte anstelle einer Liste einfügen können, ist Ihr Problem dadurch gelöst. Ordnen Sie Ihre Werte einfach einem Wert ungleich Null zu und tun Sie dies,
<c:if test="${mymap.myValue ne null}">style='display:none;'</c:if>
oder Sie können sie sogar zuordnenstyle='display:none;
und einfach ausgeben${mymap.myValue}
quelle
ODER
quelle
Wenn Sie EL 3.0+ verwenden , ist der beste Ansatz in diesem Fall, wie diese andere Antwort in einem anderen Thema erläutert wird:
quelle
Wenn Sie Spring Framework verwenden, können Sie Spring TagLib und SpEL verwenden:
quelle
Ich fand diese Lösung erstaunlich.
Die Ausgabe für den obigen Code lautet
Meine Liste ist [eins, zwei, drei]
Meine Liste enthält zwei
Meine Liste enthält:
Ich hoffe es hilft jemandem.
quelle
Das funktioniert gut für mich.
quelle