web-dev-qa-db-ja.com

文字列に指定された値がELに含まれているかどうかをテストするにはどうすればよいですか?

文字列のリストがあり、それをセッションに設定します:

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

次に、datas属性に「Apple」という単語が含まれていない場合は、JSPをチェックインします。これが含まれていない場合、メッセージは含まれていません。最初に私はこのようなことをしようとしました:

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

ただし、セッションに次の値が含まれる場合の前述のコード:

アップルバナナレモン

「含まれない」というメッセージを2回印刷します。私はこれが正常であることを知っていますが、私が欲しいものを作るためにどのようにこれを扱うことができますか?

23
Alex Dowining

_!=_は、exact不等式をテストします。代わりに fn:contains() または 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

あなたは私たちに必要になるだろう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>

fn:containsIgnoreCase()を使用すると、部分一致(特定の文字列内の部分文字列の存在)がチェックされます。たとえば、データが["Pineapple"、 "Banana"、 "Lemon"]の場合、一致するものも取得されます。完全な文字列として「Apple」とのみ一致させたいと思うでしょう。

5
anotherdave