2017-02-10 35 views
-2

我有这种阵列与一些标识,命名arrayListIDsArrayList.contains错误地考虑值作为阵列的一部分:d

[2176, 117]

我循环,并检查每一个,如果其ID是阵列中或不。

所以在环路的地方,我有:

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

对于价值11返回true我想知道这是怎么可能呢?

我已经117而不是11 ...

还是我失去了一些东西?

+1

为什么你确定数组不包含11或者你测试的值实际上是11? –

+0

原因我已经打印了两个...请看看这个:https://www.screencast.com/t/0Jso7Fl1pxW ...我已经打印了阵列顶部的ID和底部的产品ID。 (AAA和BBB只是虚拟文本。) –

+0

您可以请发布更多的代码,类似if语句的大概内容,以及产品来自哪里 –

回答

0

如果你确信你的列表中没有元素11为什么不在JSTL中输出数组并看看你在那个阶段得到了什么?

更重要的是,尝试通过阵列以不同的方式运行,而不是使用

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

看到你在这里买到的输出。

+0

我已经打印出阵列和每个元素的ID:https://www.screencast.com/t/0Jso7Fl1pxW ...阵列位于顶部,产品ID位于底部。 (AAA和BBB是虚拟文本。) –

+0

这工作......但这种方式我有嵌套循环。这是我想避免的。 –

+0

O,我终于明白了,arrayListIDs是字符串,不是吗? –

1

原因是ArrayList.containsJSF的一部分,而不是JSPJSTL。而且您的环境不支持JSF

我有同样的问题,解决这样说:

  1. 定义字符串,在那里我会把这些ID:String productsIDs = "|";
  2. 遍历数据,并把这些ID在此字符串:

    while(xxx.hasNext()) { 
        [SomeType] product = (SomeType) itr.next(); 
        productsIDs += product.getProductID(); 
        productsIDs += "|"; 
    } 
    

这样,最后我有串状|1|2|33|400|的ID。

  • 之后,你检查这样的:

    <c:if test="${fn:contains(productsIDs, currentProductID)}"> 
    
  • fn:contains作品只能用字符串,所以这种方式,您可以使用它。

    相关问题