我使用 Java 8,Tomcat 8,Servlet 3.1.0,JSP 2.0和JSTL 1.2. 我希望能够做到以下几点.但是,它不起作用. c:forEach var="item" items="${itemList}" varStatus="status" tr td${status.index + 1}/td td${item.itemCode}/td td${item.dis
我希望能够做到以下几点.但是,它不起作用.
<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.favourites是一组项目
可能是我没有正确版本的依赖项.我的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-api和jsp-api由Tomcat提供. jstl的版本是否正确?
事实证明它确实有效,但我手头有另一个问题.我的实体(项目和用户)来自Hibernate,来自两个不同查询中的两个不同的DAO,因此收藏夹列表中的项目是与itemList中的项目不同的对象.
我没有在User和Item类中实现(重写)hashCode()和equals()方法,因此Collection.contains()只是查看对象标识而不是等价.
一旦我实现了hashCode()和equals()方法,它就会按预期工作.
我发现这一点的方式是我决定实现一个调用Collection.contains(…)方法的自定义TLD函数,然后注意到即使那样返回false.