2017-02-10 85 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作品只能用字符串,所以這種方式,您可以使用它。