2014-12-03 80 views
2

我正在使用Java 8,Tomcat 8以及Servlet 3.1.0,JSP 2.0和JSTL 1.2。如何檢查集合是否包含使用JSP/EL/JSTL的項目

我希望能夠做到以下幾點。但是,它不起作用。

<c:forEach var="item" items="${itemList}" varStatus="status"> 
    <tr> 
    <td>${status.index + 1}</td> 
    <td>${item.itemCode}</td> 
    <td>${item.displayName}</td> 
    <td> 
     <c:choose> 
     <c:when test="${user.favourites.contains(item)}">Yes</c:when> 
     <c:otherwise>No</c:otherwise> 
     </c:choose> 
    </td> 
    </tr> 
</c:forEach> 

其中user.favouritesitem小號

一個Set難道是因爲我沒有依賴關係的正確版本。我的POM包含;

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
    <scope>provided</scope> 
    </dependency> 

    <dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>jsp-api</artifactId> 
    <version>2.0</version> 
    <scope>provided</scope> 
    </dependency> 

    <dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>jstl</artifactId> 
    <version>1.2</version> 
    </dependency> 

servlet-apijsp-api由Tomcat的提供。 jstl的版本是否正確?

回答

4

事實證明,它確實工作,但我有另一個問題。

我的實體(itemuser)從Hibernate的到來,從兩個不同的DAO在兩個不同的查詢,所以在favourites列表中item是一個不同的對象來itemitemList

我沒有執行(覆蓋)的hashCode()equals()在我UserItem類的方法,所以Collection.contains()只是在尋找對象的身份不等價。

只要我實施了hashCode()equals()方法,它們都按預期工作。

我發現這一點的方式是我決定實施一個自定義頂級域名(TLD)功能,調用Collection.contains(...)方法,然後注意到即使是返回false

-3

您可以使用JSTL標籤庫中提供的contains功能。請在JSTL fn:contains() Function

這會幫助你。

+1

從我所看到的'fn:contains'用於檢查一個字符串是否包含另一個字符串中的值,而不用於檢查集合是否包含給定的項目 – Vihung 2014-12-03 11:29:19

+0

您可以參考此www.experts-exchange.com /編程/語言/Java/J2EE/Q_24847712.html,第4條評論使用相同的方法。 – Vicky 2014-12-03 11:44:22

+0

我懷疑它可能已經工作,因爲數組的字符串表示包含該對象的字符串表示。實際上它做了一個'array.toString()。contains(object.toString())'。一個方便的僥倖,不是我想要依賴的東西 – Vihung 2014-12-03 16:48:40

相關問題