在我的名单" rooms"有一个对象集合,其中包含一个名为" floor"这是一个整数。
我正在尝试使用这些楼层的列表填充选择,但我无法弄清楚如何删除重复项。
我可以在循环中使用<c:if>
,还是有其他方法可以确保没有重复?
到目前为止我所拥有的:
<select id="floorFilter">
<option value=""></option>
<c:forEach var="room" items="${rooms}">
<c:if test="">
<option value="${room.floor}">${room.floor}</option>
</c:if>
</c:forEach>
</select>
编辑:每个&#39;房间&#39;有一个地板&#39;用户在创建时分配给它的属性。没有地板的集合&#39;引用,因此无法从后端删除重复项。
答案 0 :(得分:1)
我不建议您这样做,但这里有一些代码可以实现您的目标:
<select id="floorFilter">
<option value=""></option>
<c:forEach var="room" items="${rooms}" varStatus="status">
<c:set var="floorAlreadyExists" value="${false}" />
<c:if test="${(status.index - 1) > 0}">
<c:forEach var="previousRoom" items="${rooms}" begin="0" end="${status.index - 1}" varStatus="inner">
<c:if test="${room.floor == previousRoom.floor}">
<c:set var="floorAlreadyExists" value="${true}" />
</c:if>
</c:forEach>
</c:if>
<c:if test="${not floorAlreadyExists}">
<option value="${room.floor}">${room.floor}</option>
</c:if>
</c:forEach>
</select>
此代码至少存在问题:
我建议您做什么是@Alex建议的:在后端执行此操作。
没有可供参考的“楼层”集合,因此无法从后端删除重复项。
您无需专门处理域实体。您只能为视图构建其他辅助结构。穿过你的房间集合,建立一系列不同的楼层,对楼层进行排序,然后将forEach
写在楼层的集合上,如下所示:
<select id="floorFilter">
<option value=""></option>
<c:forEach var="floor" items="${floors}">
<option value="${floor}">${floor}</option>
</c:forEach>
</select>
这样JSP很容易理解,后端的代码将是Java,因此更简洁,更容易休闲。