web-dev-qa-db-fra.com

Comment tester si une chaîne contient la valeur donnée dans EL?

J'ai une liste de String et je l'ai mise en session:

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

Ensuite, je veux vérifier dans un JSP, si dans l'attribut datas ne contient pas le mot "Apple" par exemple. Si cela ne contient pas, alors imprimer un message ne contient pas. Au départ, j'ai essayé de faire quelque chose comme ça:

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

Mais le code précité, au cas où la session contiendrait les valeurs suivantes:

Apple Banana Lemon

Imprime deux fois le message "Ne contient pas". Je sais que c'est normal mais comment puis-je traiter cela afin de faire ce que je veux?

23
Alex Dowining

Le != Teste l'inégalité exacte . Vous devez utiliser à la place la fonction fn:contains() ou 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>
48
BalusC

Vous auriez besoin de nous 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>

L'utilisation de fn: containsIgnoreCase () vérifiera une correspondance partielle (la présence d'une sous-chaîne dans une chaîne donnée). Donc, si vos données étaient ["Pineapple", "Banana", "Lemon"] par exemple, vous obtiendrez également une correspondance. Je suppose que vous ne voudriez faire correspondre que Apple avec une chaîne complète.

5
anotherdave