2012-07-03 3 views
22

Ich habe eine Liste von String und ich stellte es in eine Session:Wie testen, ob eine Zeichenfolge den angegebenen Wert in EL enthält?

session.setAttribute("datas", result.getBody().getDatas()); 

Dann i in einer JSP überprüfen möchten, ob in den Daten-Attribut nicht das Wort „Apfel“ zum Beispiel enthalten sind. Wenn dies nicht enthalten ist, dann druckt eine Nachricht nicht enthalten. Am Anfang habe ich versucht, so etwas zu tun:

<c:forEach items="${datas}" var="data"> 
     <c:if test="${data!='apple'}"> 
      <p> Doesn't contained</p> 
     </c:if> 
    <c:for>   

Aber die oben genannten Code, in dem Fall, dass die Sitzung die folgenden Werte enthalten:

Apfel Banana Lemon

Drucke zweimal die Meldung " Enthält nicht ". Ich weiß, dass das normal ist, aber wie kann ich das behandeln, um das zu machen, was ich will?

Antwort

46

Die != Tests für genau Ungleichheit. Sie müssen stattdessen die Funktion fn:contains() oder fn:containsIgnoreCase() verwenden.

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 

...

<c:forEach items="${datas}" var="data"> 
    <c:if test="${not fn:containsIgnoreCase(data, 'apple')}"> 
     <p>Doesn't contain 'apple'</p> 
    </c:if> 
</c:forEach> 
+8

Vergessen Sie nicht, die relevante Taglib an der Spitze Ihrer JSP '<% @ taglib prefix =" fn "uri =" http://java.sun.com/jsp/jstl/functions "%>' zu deklarieren –

+1

Es würde sonst sowieso eine ziemlich selbsterklärende und ziemlich googelnde Ausnahme/einen Fehler werfen. – BalusC

+4

ja, schrieb das nur, um Details zur Antwort für Leute, die neu in jsp/jstl sind, hinzuzufügen ... –

4

würden Sie uns brauchen fn: toLowerCase():

<c:forEach items="${datas}" var="data"> 
    <c:if test="${fn:toLowerCase(data) ne 'apple'}"> 
     <p>Doesn't contain</p> 
    </c:if> 
</c:forEach> 

Mit fn: containsIgnoreCase() wird für einen Scheck Partielle Übereinstimmung (das Vorhandensein einer Teilzeichenfolge innerhalb einer gegebenen Zeichenfolge). Wenn Sie beispielsweise Daten wie ["Ananas", "Banane", "Zitrone"] haben, erhalten Sie auch eine Übereinstimmung. Ich nehme an, Sie möchten nur gegen 'Apfel' als eine vollständige Zeichenfolge übereinstimmen.