2012-07-03 6 views
22

Ho un elenco di stringa e ho impostato in una sessione:Come testare se una stringa contiene il valore dato in EL?

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

Poi voglio verificare in una JSP, se l'attributo dati non conteneva la parola "mela", per esempio. Se questo non è contenuto, stampare un messaggio non è contenuto. Inizialmente ho provato a fare qualcosa di simile:

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

Ma il codice di cui sopra, nel caso in cui la sessione contiene i seguenti valori:

di Apple Banana Limone

Stampa due volte il messaggio " Non contenuto ". So che questo è normale, ma come posso trattarlo per fare ciò che voglio?

risposta

46

I test != per diseguaglianza esatta. È necessario invece utilizzare la funzione fn:contains() o fn:containsIgnoreCase().

<%@ 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

Non dimenticare di dichiarare il taglib pertinente nella parte superiore del tuo jsp '<% @ taglib prefix =" fn "uri =" http://java.sun.com/jsp/jstl/functions "%>' –

+1

In ogni caso, sarebbe comunque un'eccezione/errore piuttosto auto-esplicativo e abbastanza googlable. – BalusC

+4

sì, l'ho scritto solo per aggiungere dettagli alla risposta per le persone nuove a jsp/jstl ... –

4

Avresti bisogno di noi 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> 

Utilizzando fn: containsIgnoreCase() controllerà per un corrispondenza parziale (la presenza di una sottostringa all'interno di una determinata stringa). Quindi se i dati fossero ["Pineapple", "Banana", "Lemon"], ad esempio, avresti anche una corrispondenza. Presumo che tu voglia abbinare solo "mela" come stringa completa.