如何测试字符串是否包含EL中的给定值?

Ale*_*ing 23 jsp jstl el

我有一个String列表,我将其设置为一个会话:

 session.setAttribute("datas", result.getBody().getDatas());
Run Code Online (Sandbox Code Playgroud)

然后我想检查JSP,如果在datas属性中没有包含单词"apple",例如.如果未包含,则打印不包含的消息.最初我试图做这样的事情:

   <c:forEach items="${datas}" var="data">
      <c:if test="${data!='apple'}">
          <p> Doesn't contained</p>
      </c:if>
   <c:for>          
Run Code Online (Sandbox Code Playgroud)

但是前面提到的代码,如果会话包含以下值:

苹果香蕉柠檬

打印两次"不包含"消息.我知道这是正常的,但我怎么能对待这个以达到我想要的呢?

Bal*_*usC 49

精确不平等的!=测试.您需要使用或函数.fn:contains()fn:containsIgnoreCase()

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
Run Code Online (Sandbox Code Playgroud)

...

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

  • 不要忘记在jsp的顶部声明相关的taglib`<%@ taglib prefix ="fn"uri ="http://java.sun.com/jsp/jstl/functions"%>` (8认同)
  • 是的,只写了这个来为jsp/jstl新手的人添加细节... (4认同)

ano*_*ave 5

您需要我们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>
Run Code Online (Sandbox Code Playgroud)

使用fn:containsIgnoreCase()将检查部分匹配项(给定字符串中是否存在子字符串)。因此,例如,如果您输入的数据是[“ Pineapple”,“ Banana”,“ Lemon”],那么您也会获得匹配项。我假设您只想将'apple'匹配为一个完整的字符串。