ArrayList.contains错误地将值视为数组的一部分:D

时间:2017-02-10 12:00:38

标签: java arraylist jstl

我有一些名为arrayListIDs

的ID

[2176, 117]

如果它的ID在数组中,我会循环并检查每一个。

所以我在循环中的某个地方:

<c:if test="${arrayListIDs.contains((Integer) product.productID)}">
...
</c:if>

对于值11,它返回true我想知道这是如何实现的?

我有117而不是11 ...

或者我错过了什么?

2 个答案:

答案 0 :(得分:1)

原因是ArrayList.contains属于JSF而非JSPJSTL。并且您的环境不支持JSF

我遇到了同样的问题并以这种方式解决了这个问题:

  1. 定义一个字符串,我会在其中输入ID:String productsIDs = "|";
  2. 遍历您的数据并将ID放在此字符串中:

    while(xxx.hasNext()) {
        [SomeType] product = (SomeType) itr.next();
        productsIDs += product.getProductID();
        productsIDs += "|";
    }
    
  3. 这样,最后我有一个ID为|1|2|33|400|的字符串。

    1. 之后你会这样检查:

      <c:if test="${fn:contains(productsIDs, currentProductID)}">
      
    2. fn:contains仅适用于字符串,因此您可以使用它。

答案 1 :(得分:0)

如果您确信在列表中没有元素11,为什么不在JSTL中输出数组并查看您在该阶段获得的内容?

更好的是,尝试以不同的方式运行数组,而不是使用contains()

<c:forEach var="item" items="${arrayListIDs}">
  <c:if test="${item eq 11}">
    <h1> Found 11 </h1>
  </c:if>
</c:forEach>

看看你在这里得到什么输出。