我有两个实体:购物和传输,具有多对多关系。 我有用于编辑商店实体的页面,用户可以在其中看到商店的运输列表,如复选框。
向用户显示我正在为所有传输使用的所有传输:
<c:forEach items="${transports}" var="transport">
<div class="checkbox">
<label>
<input type="checkbox" value="${transport.id}"> ${transport.name}
</label>
</div>
</c:forEach>
此页面上我还有一个购物对象,可以获取商店的运输清单。问题是当我显示所有运输清单时,我想标记为已检查商店的运输。 因此,用户将能够看到哪些传输属于商店,哪些不属于商店。
无法弄清楚如何在我的循环中检查它。提前谢谢。
EDITED
public boolean hasTransport(Transport transport, Integer id) {
boolean result = false;
for (Shop shop : transport.getShops()) {
if (shop.getId().equals(id)) {
result = true;
break;
}
}
return result;
}
并在jsp页面上查看:
<c:forEach items="${transports}" var="transport">
<div class="checkbox">
<label>
<c:choose>
<c:when test="${shop.hasTransport(transport, shop.id)}">
<input type="checkbox" checked name="transportsId" value="${transport.id}"> ${transport.name}
</c:when>
<c:otherwise>
<input type="checkbox" name="transportsId" value="${transport.id}"> ${transport.name}
</c:otherwise>
</c:choose>
</label>
</div>
</c:forEach>
答案 0 :(得分:2)
向Shop添加方法:
公共类商店{
......
private Set<Transport> transports;
public boolean hasTransport(Transport transport){
//check if Set contains specified transport
//implement equals/hasCode or iterate and check the Ids
}
.....
}
如果您的应用程序符合Servlet Spec 3,您可以从EL中调用它:
<c:forEach items="${transports}" var="transport">
<div class="checkbox">
<label>
<input type="checkbox" value="${transport.id}" checked="${shop.hasTransport(transport)}"/> ${transport.name}
</label>
</div>
</c:forEach>
答案 1 :(得分:0)
一个简单的解决方案是:
1)在Transport类中实现一个checker方法,它检查给定的Transport是否与给定的Shop有关系(Transport#isRelatedWith(Shop):boolean)
2)创建一个标签(可以是Java实现或JSP),它将使用checker方法设置复选框的状态
另一个解决方案(不推荐)是使用JSP所谓的scriptlet&lt;%code-goes-here%&gt;
来实现这个逻辑。