2012-07-03 16 views
22

Tengo una lista de los Hilos y me la pusieron en una sesión:¿Cómo probar si una cadena contiene el valor dado en EL?

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

entonces quiero comprobar en un JSP, si en atribuyen los datos básicos no contenía la palabra "manzana", por ejemplo. Si esto no contiene, a continuación, imprimir un mensaje no contiene. Al principio traté de hacer algo como esto:

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

Pero el código antes mencionado, en el caso de que la sesión contiene los siguientes valores:

de Apple plátano limón

imprime dos veces y el mensaje " No contiene ". Sé que esto es normal, pero ¿cómo puedo tratar esto para hacer lo que quiero?

Respuesta

46

!= pruebas para exactas desigualdad. En su lugar, debe usar la función 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

No olvide declarar el taglib relevante en la parte superior de su jsp '<% @ taglib prefix =" fn "uri =" http://java.sun.com/jsp/jstl/functions "%>' –

+1

De lo contrario arrojaría una excepción/error bastante auto explicativo y bastante googlable de todos modos. – BalusC

+4

sí, solo escribió esto para agregar detalles a la respuesta para las personas nuevas en jsp/jstl ... –

4

Usted sería necesario que nos 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> 

Usando fn: containsIgnoreCase() va a comprobar si hay una coincidencia parcial (la presencia de una subcadena dentro de una cadena dada). Entonces, si tu información fuera ["Pineapple", "Banana", "Lemon"], por ejemplo, también obtendrías una coincidencia. Supongo que solo querrás unir contra 'apple' como una cadena completa.

Cuestiones relacionadas